Pythonで、UTF-8でエンコードされたファイルを読み込んだ場合に1行目が正しく取得できない現象にハマったので備忘録的に投稿しておきます。
原因はBOM
気が付けば、何のこともない原因ですがトラブっている最中だと焦ります。
例えば、CSVファイルを読み込んで、1行ずつ処理したい場合最初の行だけ想定通りに動かない状況になります。
import csv
import os
CSVPATH = "sample.csv"
with open(CSVPATH, encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
if os.path.isdir(row[0]) == True:
print("処理中:" + os.path.basename(row[0]))
ファイル側に問題があるのかと、行を入れ替えても1行目だけ上手く動作してくれない場合は、ファイルの先頭部分のBOMが邪魔をしています。
対処法としては、encoding で指定する値を “utf-8” から “utf-8-sig” に変更するとBOMをキャンセルできます。
import csv
import os
CSVPATH = "sample.csv"
with open(CSVPATH, encoding="utf-8-sig") as f:
reader = csv.reader(f)
for row in reader:
if os.path.isdir(row[0]) == True:
print("処理中:" + os.path.basename(row[0]))
まとめ
今回は短い記事ですが、UTF-8でエンコードされたファイルを読み込んだ場合に1行目が正しく取得できない場合の対処法について書きました。
Pythonで読み込んだ、文字コードがUTF-8で保存されたファイルの1行目が想定通りに処理できない人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。
