Braindump

Python でテキストファイル読み込み時に注意すること

July 31, 2023
python

案件などでお客様の使用しているテキストファイル (CSV, YAML, TXT, etc…) を読み込んでゴニョゴニョする処理を書くときがある。 これらのテキストファイルがどこでどのように作られたかは分からない。 システムの文字コードとファイルの文字コードが異なる場合、ファイル読み込みに失敗する。 また、ファイルが暗号化されていても読み込みに失敗する。 そのため、ファイル読み込み処理は上記のことを考慮して実装する必要がある。 諸々考慮して実装した、ぼくのかんがえたさいきょうのコードが下記。 def load_file(path_to_file): encodings = ["utf-8-sig", "cp932", "shift_jis", "euc-jp", "iso-2022-jp"] for encoding in encodings: try: with open(path_to_file, "r", encoding=encoding) as f: # 何らかの方法でファイル読み込み # yaml の場合 loaded_file = yaml.safe_load(f) # いろいろして、何かを return する return # 指定した encoding で読み込みに失敗したとき except UnicodeDecodeError as e: # 別の encoding を試すために continue で次のループへ進む # 失敗したという情報を残しておいてもいいかもしれない logger.debug(e) continue # その他もろもろ想定され得るエラーを拾う except ... ... # 想定外のエラーを忘れずに拾う except Exception as e: # いろいろ処理したりメッセージ出したり終了させたり . ...