Python
python3

Python3ではcsvモジュールを使わなくてもCSVを出力できる

この記事は Pythonのコードを短く簡潔に書くテクニック Advent Calendar 2017 の20日目です。

はじめに

PythonでCSV/TSVを出力するにはcsvモジュールを使用しますが、簡単なCSVならprint関数だけでも出力できます。

例題

以下のようにタプルで構成された行がリストに格納されているデータをCSVファイルへ出力するケースを考えてみます。

data = [
    (1, 'あいうえお', 'abc'),
    (2, 'かきくけこ', 'def'),
    (3, 'さしすせそ', 'ghi'),
]

csvモジュールを使う場合

import csv

with open('csv.csv', 'w') as f:
    writer = csv.writer(f)
    for row in data:
        writer.writerow(row)

print関数を使う場合

with open('print.csv', 'w') as f:
    for row in data:
        print(*row, sep=',', file=f)

writerを作成する必要がなくなるので短くなります。

解説

print関数には複数の値を渡すことができます。

>>> print(1, 2, 3)
1 2 3

リストやタプルを渡したいときは*をつけてアンパックします。

>>> args = [1, 2, 3]
>>> print(*args)
1 2 3

デフォルトではスペースで区切られますが、sep引数で区切文字を指定できます。

>>> print(1, 2, 3, sep=',')
1,2,3

デフォルトの出力先は標準出力(sys.stdout)ですが、file引数でファイルオブジェクトを渡せば出力先をファイルに変更できます。

>>> f = open('file.txt', 'w')
>>> print(1, 2, 3, file=f)

print関数だけで十分なケース

  • 文字列を""で囲う必要がない
  • カンマや改行などエスケープする必要がある文字を含まない

参考