文章

Python 密技 - CSVDictWriter 搭配 defaultdict 省時又省力

Python 的 CSVDictWriter 是很方便的模組,可以直接使用 dict 資料寫入到 CSV 檔案,其用法大致如下:

import csv

with open('my.csv', 'w') as csvf:
    writer = csv.DictWriter(csvf, fieldnames=[
        'field_1',
        'field_2',
        'field_3'
    ])

    writer.writeheader()
    writer.writerow({'field_1': '', 'field_2': 'b', 'field_3': ''})
    writer.writerow({'field_1': '', 'field_2': 'b', 'field_3': ''})

CSVDictWriter 雖然方便,但是如果 row 裡有缺少任何一個 field 都會停止執行,所以遇到欄位很多,而且又不見得每一個欄位都有值的情況就糟糕了,真的要手動打完所有欄位的值嗎?

其實只要搭配 defaultdict 就解決這個問題了。

Posted on  Sep 2, 2016  in  Python 程式設計 - 中階  by  Amo Chen  ‐ 1 min read

Swagger UI Header Parameters

Swagger UI 是由 Swagger 官方維護的一套純由 HTML / CSS / Javascript 打造的 Swagger 工具。 Demo

Swagger UI 不需要安裝任何套件就可以在瀏覽器上運作,不過有些 API 設計上會需要 API key ,所以 Swagger UI 也很貼心地提供, API key 在右上角提供 API key 的輸入框供人使用,只是這 API key 是用 GET parameter 的方式附加在 API 的 path 之後。

例如 /user/login 這個 API 在填上 Swagger UI 右上角的 API key 情況下,發出 request 時就會變成 /user/login?api_key=your_api_key

但這時如果要改成將 API key 放在 HTTP header 時就需要改些程式了(本篇以 Swagger UI 2.1.4 作為範例)。

Posted on  Aug 23, 2016  in  開發工具  by  Amo Chen  ‐ 1 min read

Git worktree 教學

以往開發時如果有遇到馬上得解決的 issue ,通常都會 stash 現在的所有變更,然後切到主線去解緊急的 issue 。直到看到 git worktree 功能之後,我改變了!

Last updated on  Dec 26, 2022  in  Git 版本控制  by  Amo Chen  ‐ 1 min read

VIM 排序

有時候不管是編輯程式或者是操作數據,難免會需要排序。如果是 CSV 檔最簡單的方法不外乎是丟到 OpenOffice, Excel 來操作;如果是程式則可以用 sort, uniq 等指令來操作。

但其實 VIM 也有提供 sort 的功能,可以很方便的進行排序或者刪除重複的資料。

Posted on  Jul 16, 2016  in  Vim  by  Amo Chen  ‐ 1 min read

Django 利用 Bugsnag 即時追蹤 Bug 與系統異常

利用 Django 開發 Web application 時可以利用 logging 模組幫忙除錯,但如果是已經上線運作的 Web application 光靠 logging 模組就不夠方便了,畢竟無法時時刻刻都去看日誌檔(log)了解系統狀況,這時候就需要一些方便的服務來幫忙,譬如 Bugsnag

Posted on  Jul 16, 2016  in  Django  by  Amo Chen  ‐ 2 min read

iTerm2 Shell Integration

iTerm2 3.0 之後,出了一些方便的功能,好比右鍵 scp 遠端伺服器的檔案、拖拉檔案 scp 上傳到遠端伺服器、查看每個指令的狀態等等。

不過這些功能都需要安裝 iTerm2 Shell Integration 在伺服器上,才有辦法運作。

Posted on  Jul 14, 2016  in  開發工具  by  Amo Chen  ‐ 1 min read