LoginSignup
16
19

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-19

この記事は 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関数だけで十分なケース

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

参考

16
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
19