csvライブラリ
csvモジュールの使い方について。
以下の内容のtest.csvを準備しました。
1,20 2,30 3,40 4,50
○csvファイルの読み取り
(1)各行はリストとして読み込まれる。
import csv with open("test.csv", "r") as f: data = csv.reader(f) print(data) <_csv.reader object at 0x...> for i in data: # 各行がリストになっている print(i) # ['1', '20'] # ['2', '30'] # ['3', '40'] # ['4', '50']
(2)joinで見やすく。
with open("test.csv", "r") as f: data = csv.reader(f) print(data) for i in data: print(", ".join(i)) # 1, 20 # 2, 30 # 3, 40 # 4, 50
csv.reader()の引数になるのは、ファイルオブジェクトまたはリスト
(3)読み飛ばしたい行があるときはnext()する。
with open("test.csv", "r") as f: data = csv.reader(f) next(data) # 1行読み飛ばす for i in data: print(", ".join(i)) # 2, 30 # 3, 40 # 4, 50
(4)読み飛ばす行をヘッダーなどとして使用するときは代入をしておく。
with open("test.csv", "r") as f: data = csv.reader(f) header = next(data) # 1行読み飛ばし、headerに代入 print(header) # ['1', '20'] for i in data: print(", ".join(i)) # 2, 30 # 3, 40 # 4, 50
○csvファイルの書き込み
newline=""とオプションを入れないと、空白行が追加されてしまう。
(1)
import csv with open('test.csv', 'w', newline="") as f: writer = csv.writer(f) writer.writerow([1] + [20]) writer.writerow([2, 30]) for i in range(3, 5): writer.writerow([i, (i + 1) * 10])
(2)
data =[[1, 20], [2, 30], [3, 40], [4, 50]] with open('test.csv', 'w', newline="") as f: writer = csv.writer(f) writer.writerows(data)