環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

Pythonでcsvファイルにリストを書き込む:デリミタとクォーテーションを指定する方法(quotecharとquotingは合わせて使う)

最終更新日 2023.02.18

Python の csv ライブラリにある csv.writer を使うと、リストを csv ファイルに書きこむことができます。

import csv

c = [['Alice', 170, 54], ['Bob', 186, 79]]

with open('test.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(c)

test.csv

Alice,170,54
Bob,186,79

出力ファイルはプログラム・ファイルと同じディレクトリに作られます。最初から用意する必要はありません。

また test.csv の終端には改行コードがあります。その状態で追記すると、最終行の次の行から新しい内容が書きこまれます。

csv ファイルへの書きこみと追記

ファイルを開くとき、モードを w にすると書きこみ(上書き)、a にすると追記になります。上の test.csv に同じ内容を追記してみます。

import csv

c = [['Alice', 170, 54], ['Bob', 186, 79]]

with open('test.csv', 'a') as f:
    writer = csv.writer(f)
    writer.writerows(c)

test.csv

Alice,170,54
Bob,186,79
Alice,170,54
Bob,186,79

デリミタをカンマ以外のものにする

writer のキーワード引数 delimiter にスペースを入れると、スペース区切りの csv ファイルができます。

import csv

c = [['Alice', 170, 54], ['Bob', 186, 79]]

with open('test.csv', 'w') as f:
    writer = csv.writer(f, delimiter=' ')
    writer.writerows(c)

test.csv

Alice 170 54
Bob 186 79

delimiter は一文字です。二文字以上を入れるとエラーになります。

import csv

c = [['Alice', 170, 54], ['Bob', 186, 79]]

with open('test.csv', 'w') as f:
    writer = csv.writer(f, delimiter=' - ')
    writer.writerows(c)

# TypeError: "delimiter" must be a 1-character string

クォーテーションを指定する

文字をクォーテーションなどで囲むときは quotechar と quoting を合わせて指定します。

import csv

c = [['Alice', 170, 54], ['Bob', 186, 79]]

with open('test.csv', 'w') as f:
    writer = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
    writer.writerows(c)

test.csv

"Alice","170","54"
"Bob","186","79"

うまくいかないときは quoting を csv.QUOTE_ALL にしてください。これはすべての要素を quotechar で囲むというオプションです。quotechar だけを指定してもうまくいきません。