#author("2020-09-21T10:17:21+00:00","default:yusami","yusami")
#author("2020-09-22T03:41:18+00:00","default:yusami","yusami")
#contents
&tag(Python,Tips);

* ファイル [#o8259f8c]
- トラブルを避けるため必ず`encoding`を明示する。
 with open(filename, "w", encoding="utf-8") as f:
   f.write(data))

* [[JSON]] [#xc89e180]
- 出力処理のイディオム
 with open(filename, "w", encoding="utf-8") as f:
   f.write(json.dumps(list(data), indent=2, ensure_ascii=False))
- [[【Python】クラスインスタンスをjsonにエンコードしたい - Qiita>https://qiita.com/Akio-1978/items/0bb4075ea05a8b4d53cc]]
 - json.dumpなどのメソッドに、クラスのインスタンスを直接投げ込んでjson化したい。
 -- 何もせずにこれをやると、TypeErrorになる。
 - エンコーダのdefaultメソッドを書き換えて、インスタンスの__dict__を返すようにすると、とりあえずうまくいく。

** [[日時]] [#e8e25c99]
- [[[Python] dateやdatetimeをjson.dumpでエラーなく出力する - YoheiM .NET>https://www.yoheim.net/blog.php?q=20170703]]
 JSONシリアライズがデフォルトではできないものについて、default引数で変換方法を指定することで、JSON文字列として出力することができます。

* データ [#h938f012]
- 繰り返し使うデータはダンプして保存しておくと、無駄な処理を省けて開発を効率的に進められる。(例:通信によるデータ取得等)
 with open(datafile, "wb") as f:
   pickle.dump(data, f)
 with open(datafile, "rb") as f:
   data = pickle.load(f)

* [[ソフトウェア品質]] [#f20c4a41]
- 引数の確認やファイルの存在確認は、容赦なく`assert`で落とす。(処理が続行してしまい、原因究明に時間を要するよりは早期に打ち切った方が効率的)
 assert API_KEY != None, "API key should be configured."
- [[pythonで現在実行されているコードの位置を出力してみる - Qiita>https://qiita.com/podhmo/items/6657ae7b6ffbadc8f773]]
 traceback.print_stack()

* 関連 [#e47ae802]
#related

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS