非asciiのCSV、Python 2.xではこうやって扱ってた

昨日の続きです。

非asciiのCSVをcodecs.open()で開いて、csv.reader()に渡すと、Python 2.xではエラーが出てしまいます。けど、Python 2.xの頃にも非asciiのCSVは使ってたわけで、どうやってたんだろう。ちょっと調べたら、こんな風にしていました。

import csv

with open(u'./data.csv', u'r')as f:
    reader = csv.reader(f)
    for row in reader:
        print(u'{0}: {1}'.format(row[0].decode(u'shift_jis'),
                                 row[1].decode(u'shift_jis')))

ここでは、strオブジェクトのdecode()を使ってますが、過去のスクリプト見ればcodecs.decode()を使ってました。でも、strのdecode()使う方がいいと思うので、こっちで書きました。

こうするとこんな感じに動作します。

$ python2.6 test.py 
商品1: 20
商品2: 15
商品3: 30

ちゃんとPython 2.xでも非asciiのCSVは使えるという話でした。でも、最初に一括でデコードできる方がはるかに便利なので、やっぱり私はPython 3000を使います。