CSVファイルを読み書きする
CSVファイルの読み込み
CSVファイルを読み書きするには csv モジュールを使う。
csv.reader関数は、CSVファイルを読み込むオブジェクトを返す。これを使って1行ずつ処理するわけだ。次の例は、名前とメールアドレスからなるCSVファイルを読み込んで、変換して出力する。
import csv
csvfile = open("mail.csv", "r")
reader = csv.reader(csvfile)
for row in reader:
print '"%s" <%s>' % (row[0], row[1])
実行:
^o^ > type mail.csv
Andy,andy@example.com
Bill,bill@example.com
Charlie,charlie@example.com
^o^ > python csv_read.py
"Andy" <andy@example.com>
"Bill" <bill@example.com>
"Charlie" <charlie@example.com>
CSVファイルの書き込み
csv.reader があれば csv.writer もある。csv.writer関数は、CSVファイルに書き込むオブジェクトを返す。そして writerowメソッドで1行ずつ書き込むって感じだ。
import csv
data = [("Andy", "andy@example.com"),
("Bill", "bill@example.com"),
("Charlie", "charlie@example.com")]
csvfile = open("sample.csv", "wb")
writer = csv.writer(csvfile)
for d in data:
writer.writerow(d)
上の例では書き込むデータとしてタプルのリストを用意しているけど、リストのリストでもいいらしい。注意点としては、書き込み用ファイルをopenするときにバイナリモード “wb” で開くこと。そうでないと余計な改行が出力されてしまう。
実行:
^o^ > python csv_write.py
^o^ > type sample.csv
Andy,andy@example.com
Bill,bill@example.com
Charlie,charlie@example.com
その他細かいことは省略
実はCSVファイルには標準というものがない。値がクオートしてあるとかないとか、そういう細かい違いがソフトごとにある。そういう違いを吸収するために、csv.reader や csv.writer には dialect とかその他のパラメータがあるんだけど、ここでは省略する。
詳しい情報はこのあたり。
cf. http://docs.python.jp/2.7/library/csv.html
とりあえず Excel 互換の CSV なら上の例のような簡単な書き方で大丈夫みたいだ。
