この記事は 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関数だけで十分なケース
- 文字列を
""
で囲う必要がない - カンマや改行などエスケープする必要がある文字を含まない
参考
- Python3 ドキュメント
- チュートリアル
- ライブラリーリファレンス
-
- 組み込み関数
- 14.1. csv — CSV ファイルの読み書き
-