kumilog.net

データ分析やプログラミングの話などを書いています。

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

f:id:xkumiyu:20171101232418j:plain

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)