非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を使います。