Python で CSV の書き込み
ここでは Python で CSV ファイルへデータを書き込む方法についてご説明します。
Python でリストを CSV ファイルに 1 行書き込む
Python でリストを CSV ファイルに書き込むには csv モジュールの writer() メソッドを使います。
csv.writer(CSV のファイルオブジェクト) で、writer オブジェクトが取得できます。
デリミターはデフォルトでカンマですが、delimiter 引数で他のデリミター文字を指定することも可能です。
writer オブジェクト.writerow(リストオブジェクト) のようにすると、指定したリストオブジェクトが CSV に変換されてファイルに 1 行書き込まれます。
それでは、次のようなリストの値を gpa.csv という名前の CSV ファイルに書き込んでみましょう。
import csv
header_row = ['FirstName', 'LastName','GPA']
with open("gpa.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(header_row)
上のコードを実行すると、次のような gpa.csv ファイルができあがります。
CSV ファイルを open する時は、書き込みできるモードで newline="" を指定します。newline="" を指定しないと、改行に \r\n が使われるシステムでは、余分な改行が入る場合があります。
Python でリストのリストを CSV ファイルに一度に追記する
Python でリストのリストを CSV ファイルに一度に書き込むには csv モジュールの writer() メソッドを使って writer オブジェクトを取得した後に、writerows() メソッドを使います。
追記にするにはファイルを開く時に "a" モードで開きます。
それでは、先ほど作成した gpa.csv ファイルに writerows() を使ってデータを追記してみましょう。
import csv
data = [['Ryota', 'Yamada', '3.1'],
['Hanako', 'Tanaka', '2.9'],
['Yuri', 'Suzuki', '4.2'],
['Taichi', 'Sato', '3.3'],
['Hiroki', 'Takagi', '3.8']]
with open("gpa.csv", "a", newline="") as f:
writer = csv.writer(f)
writer.writerows(data)
上のコードを実行すると、gpa.csv ファイルに data リストが CSV に変換されて追記されました。
Python で辞書を CSV ファイルに書き込む
Python で辞書を CSV ファイルに書き込むには csv モジュールの DictWriter() メソッドを使います。
DictWriter を使う時に、引数の fieldnames は必須で、辞書とフィールドを map するのに使われます。
例えば、次のような辞書のリストを DictWriter() を使って CSV ファイルに書き込むには次のようにできます。
import csv
data = [
{"FirstName": "Ryota", "LastName": "Yamada", "GPA": 3.1},
{"FirstName": "Hanako", "LastName": "Tanaka", "GPA": 2.9},
{"FirstName": "Yuri", "LastName": "Suzuki", "GPA": 4.2},
{"FirstName": "Taichi", "LastName": "Sato", "GPA": 3.3},
{"FirstName": "Hiroki", "LastName": "Takagi", "GPA": 3.8}
]
with open("gpa_dict.csv", "w", newline="") as f:
fieldnames = ["FirstName", "LastName", "GPA"]
dict_writer = csv.DictWriter(f, fieldnames=fieldnames)
dict_writer.writeheader()
dict_writer.writerows(data)
上のコードを実行すると、次のような gpa_dict.csv ファイルができあがります。
dict_writer.writeheader() でヘッダー行を 1 行書き込んでいます。
dict_writer.writerows(data) で辞書オブジェクトのリストを 1 行ずつ map して CSV に変換してファイルに書き込んでいます。
fieldnames に辞書オブジェクトのキーとなっている値が存在していない時、例えば fieldnames = ["FirstName", "LastName"] のみ出力したい時、このままだと ValueError になります。
fieldnames に指定しなかったキーは無視して、特定のキーの値のみを CSV ファイルに書き込みたい時は、DictWriter を生成する時に、extrasaction="ignore" のオプションを追加します。
import csv
data = [
{"FirstName": "Ryota", "LastName": "Yamada", "GPA": 3.1},
{"FirstName": "Hanako", "LastName": "Tanaka", "GPA": 2.9},
{"FirstName": "Yuri", "LastName": "Suzuki", "GPA": 4.2},
{"FirstName": "Taichi", "LastName": "Sato", "GPA": 3.3},
{"FirstName": "Hiroki", "LastName": "Takagi", "GPA": 3.8}
]
with open("name.csv", "w", newline="") as f:
fieldnames = ["FirstName", "LastName"]
dic_writer = csv.DictWriter(f, fieldnames=fieldnames, extrasaction="ignore")
dic_writer.writeheader()
dic_writer.writerows(data)
上のコードを実行すると、次のような name.csv ファイルができ、FirstName と LastName のみが書き込まれています。
以上、Python で CSV ファイルへデータを書き込む方法についてご説明しました。