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 だけを指定してもうまくいきません。