CSV¶
Python で CSV の読み書きを行いたい場合は csv
モジュールを使います。
読み込み¶
reader¶
CSV ファイルを読み込む場合は open()
でファイルを開いた後、ファイルオブジェクトを csv.reader()
に渡します。
#!/usr/bin/env python
import csv
def main():
with open('example.csv', newline='') as f:
reader = csv.reader(f)
for row in reader:
print(row) # row は CSV の各行になる
if __name__ == '__main__':
main()
注意
newline=''
というのはファイルの改行コードをそのまま読み込むというオプションです。これを付けないと CRLF, LF, CR などの改行コードはすべて LF に変換されてファイルが読み込まれますが CSV を読むときはこの変換をすべきでないとされています。
row
にはカンマ区切りの要素がリストで保存されます。
example.csv
0,A
1,B
2,C
上記のファイルに対しては row
は下記のようになります。
[0, 'A']
[1, 'B']
[2, 'C']
DictReader¶
CSV が下記のようなヘッダを持つ場合は reader()
の代わりに DictReader
を使うと各行を辞書で読むことができるようになります。
example.csv
id,name
0,A
1,B
2,C
#!/usr/bin/env python
import csv
def main():
with open('example.csv', newline='') as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
実行結果は下記のようになります。
{'id': 0, 'name': 'A'}
{'id': 1, 'name': 'B'}
{'id': 2, 'name': 'C'}
書き込み¶
writer¶
CSV ファイルを作成するには open()
でファイルを開いた後 csv.writer()
にファイルオブジェクトを渡します。
#!/usr/bin/env python
import csv
def main():
with open('example.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow([0, 'A'])
writer.writerow([1, 'B'])
writer.writerow([2, 'C'])
注意
書き込みの場合も newline=''
は必ず付けるようにしてください。
DictWriter¶
ヘッダ付きの CSV を作成したい場合は writer()
の代わりに DictWriter
を使うと書き込む要素を辞書で指定できるようになります。
#!/usr/bin/env python
import csv
def main():
with open('example.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['id', 'name'])
writer.writerow({'id': 0, 'name': 'A'})
writer.writerow({'id': 1, 'name': 'B'})
writer.writerow({'id': 2, 'name': 'C'})
if __name__ == '__main__':
main()