Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

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

参考

tag1216
Qiita戦闘力はキュイレベルです! /作ったもの ◆QiiTrend:https://qiitrend.herokuapp.com/ ◆Qiiner:https://qiiner.tag1216.net/ ◆Qiitaでいいねしたら草生えるページ:https://qiiner.tag1216.net/likes-heatmap
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away