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,[email protected] Bill,[email protected] Charlie,[email protected] ^o^ > python csv_read.py "Andy" <[email protected]> "Bill" <[email protected]> "Charlie" <[email protected]>
CSVファイルの書き込み
csv.reader があれば csv.writer もある。csv.writer関数は、CSVファイルに書き込むオブジェクトを返す。そして writerowメソッドで1行ずつ書き込むって感じだ。
import csv data = [("Andy", "[email protected]"), ("Bill", "[email protected]"), ("Charlie", "[email protected]")] 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,[email protected] Bill,[email protected] Charlie,[email protected]
その他細かいことは省略
実はCSVファイルには標準というものがない。値がクオートしてあるとかないとか、そういう細かい違いがソフトごとにある。そういう違いを吸収するために、csv.reader や csv.writer には dialect とかその他のパラメータがあるんだけど、ここでは省略する。
詳しい情報はこのあたり。
cf. http://docs.python.jp/2.7/library/csv.html
とりあえず Excel 互換の CSV なら上の例のような簡単な書き方で大丈夫みたいだ。