#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