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 ファイルができあがります。

Python で CSV の書き込み 1


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 の書き込み 2

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 ファイルができあがります。

Python で CSV の書き込み 3

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 の書き込み 4


以上、Python で CSV ファイルへデータを書き込む方法についてご説明しました。

© 2024 やさしい Python 入門