Python Tips: 特定の文字コードの CSV ファイルを読み込みたい

今回は Python で特定の文字コードの CSV をデコードしながら読み込む方法をご紹介したいと思います。

標準ライブラリの csv を使う場合は、セル単位に切り離したときに decode するとよいかと思います。ファイル名と文字コードを指定すると内容を抽出してくれるヘルパー関数を書いてみます。

import csv

def csv_read(filename, encoding):
    """CSV ファイルを文字コードを指定して読み込む
    """
    with open(filename, "rb") as f:
        csvfile = csv.reader(f)
        rows = [[c.decode(encoding) for c in r] for r in csvfile]
        return rows

if __name__ == "__main__":
    # 確認
    csv_filename = "target.csv"
    encoding = 'sjis'
    csv_rows = csv_read(csv_filename, encoding)

ファイルサイズがものすごく大きな場合などにはそれなりの工夫が必要かと思いますが、通常のサイズの CSV ならこれで十分かと思います。