CSVファイルを読み書きするには、csvモジュールのcsv.readerとcsv.writerを使用します。
CSVファイルの読み込み
まず、open()でファイルをオープンします。
1 |
file = open('サンプル.csv') |
次に、readerオブジェクトを作成します。
1 |
reader = csv.reader(file) |
そして、for文やnextなどを使ってreaderオブジェクトから1行ごとに取得します。
1 2 |
for row in reader: # 何かの処理 |
この場合、rowはカンマで区切られたリストが格納されています。
ファイル読み込みのサンプル
ファイルを読み込むときはopen()を読み込みモードで指定してファイルを開きます。
ここではwith構文を使うことで、オープンしたファイルのクローズを省略しています。特に理由がない場合は、with構文を使用した方が安全にファイルを扱うことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# -*- coding: utf-8 -*- import csv # ファイルを読み込みモードでオープン with open('sample.csv', 'r') as f: reader = csv.reader(f) # readerオブジェクトを作成 header = next(reader) # 最初の一行をヘッダーとして取得 print ''.join(header) # ヘッダーをスペース区切りで表示 # 行ごとのリストを処理する for row in reader: print ''.join(row) # 1行ずつスペース区切りで表示 |
next文を使うことでヘッダーなど特定の行の処理を分けることができます。
1 2 3 4 |
NAME,AGE,JOB Mike,21,Designer Tom,24,Engineer Anna,31,Doctor |
例えば上のCSVファイル(sample.csv)を読み込むと、以下のような実行結果になります。
1 2 3 4 |
NAME AGE JOB Mike 21 Designer Tom 24 Engineer Anna 31 Doctor |
CSVファイルの書き込み
まず、writerオブジェクトを作成します。
1 |
writer = csv.writer(ファイルオブジェクト) |
そして、writerowやwriterowsを使って書き込みます。1行だけ書き込むときにはwriterow、複数行を書き込むときにはwriterowsを使用すると良いでしょう。
1 |
writer.writerow(書き込む配列) |
1 |
writer.writerows(書き込む配列の配列) |
書き込みのサンプル
下の例では1行目のヘッダーをwriterow関数を使って書き込み、2行目以降をwriterows関数を使って書き込んでいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# -*- coding: utf-8 -*- import csv # ヘッダー header = ['ID', 'name'] # 内容 body = [ [0, 'Alex'], [1, 'John'], [2, 'Bob'] ] # ファイルを書き込みモードでオープン with open('sample.csv', 'w') as f: writer = csv.writer(f) # writerオブジェクトを作成 writer.writerow(header) # ヘッダーを書き込む writer.writerows(body) # 内容を書き込む |
上のプログラムを実行すると以下のようなファイル(sample.csv)が作成されます。
1 2 3 4 |
ID,name 0,Alex 1,John 2,Bob |