文字コードがUTF-8のCSVファイルを読み込む
絶対忘れるので書いておく。
まず、pythonでcsvを読み込むには、csv.reader() を使う。
これは、1行分のデータが配列になって帰ってくるものなので、項目の何番目は何の項目、ってのを自分でわかっている必要がある。
次に、csvファイルの先頭行をヘッダとして使ってくれる、csv.dictReader() というのがある。
こんなふうに使う。
test.csv (文字コードはUTF-8とする)
id, name, value 101, 名前1, 1000 102, 名前2, 2000 103, 名前3, 3000 …
プログラム
ROOTPATH = os.path.dirname(__file__) FILEPATH = os.path.join(ROOTPATH, "test.csv") f = open(FILPATH, "rb") try: rows = csv.DictReader(f) for row in rows: print row["id"] print row["name"] #文字化けしちゃう print row["value"] finally: f.close()
しかしながら、このままではマルチバイト系に対応していない。上記の例だと、"name"列の値をprintしている箇所は文字化けしてしまう。これを解消するため、Unicodeに変換するラッパーメソッドを作る。
def UnicodeDictReader(utf8_data, **kwargs): rows = csv.DictReader(utf8_data, **kwargs) for row in rows: yield dict([(key, unicode(value, "utf-8")) for key, value in row.iteritems()]) ROOTPATH = os.path.dirname(__file__) FILEPATH = os.path.join(ROOTPATH, "test.csv") f = open(FILPATH, "rb") try: rows = UnicodeDictReader(f) for row in rows: print row["id"] print row["name"] #文字化けしない print row["value"] finally: f.close()
yieldがポイント!!!