Python 3でファイル読み込み時のUnicodeDecodeErrorを回避する


Pythonでファイルを読み込むときは以下のような処理でいけますが…
with open('file/to/path', 'r') as f:
for line in f:
line = line.strip()
# つづきの処理
読み込んでいる途中で、utf-8ではない文字が含まれていると、UnicodeDecodeErrorが発生することがあります。for line in fの行で発生します。
大きなファイル、特にどこかからダウンロードしたファイルの場合、どの文字がutf-8ではないのか、特定することが難しいです。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 1024: invalid start byte
codecsモジュールを使うと、ファイルがutf-8であることを明示して、utf-8以外の文字が含まれていると、その行を無視して次の行を読み込みます。
import codecs
with codecs.open('file/to/path', 'r', 'utf-8', 'ignore') as f:
for line in f:
line = line.strip()
# つづきの処理
pandasでの読み込みも同様に対処できます。
import codecs
import pandas as pd
with codecs.open('file/to/path', 'r', 'utf-8', 'ignore') as f:
df = pd.read_csv(f)