1. tag1216

    No comment

    tag1216
Changes in tags
Changes in body
Source | HTML | Preview
@@ -1,83 +1,87 @@
+この記事は [Pythonのコードを短く簡潔に書くテクニック Advent Calendar 2017](https://qiita.com/advent-calendar/2017/python-short-code) の20日目です。
+
+# はじめに
+
PythonでCSV/TSVを出力するにはcsvモジュールを使用しますが、簡単なCSVならprint関数だけでも出力できます。
# 例題
以下のようにタプルで構成された行がリストに格納されているデータをCSVファイルへ出力するケースを考えてみます。
```py3
data = [
(1, 'あいうえお', 'abc'),
(2, 'かきくけこ', 'def'),
(3, 'さしすせそ', 'ghi'),
]
```
# csvモジュールを使う場合
```py3
import csv
with open('csv.csv', 'w') as f:
writer = csv.writer(f)
for row in data:
writer.writerow(row)
```
# print関数を使う場合
```py3
with open('print.csv', 'w') as f:
for row in data:
print(*row, sep=',', file=f)
```
writerを作成する必要がなくなるので短くなります。
# 解説
print関数には複数の値を渡すことができます。
```pycon
>>> print(1, 2, 3)
1 2 3
```
リストやタプルを渡したいときは`*`をつけてアンパックします。
```pycon
>>> args = [1, 2, 3]
>>> print(*args)
1 2 3
```
デフォルトではスペースで区切られますが、sep引数で区切文字を指定できます。
```pycon
>>> print(1, 2, 3, sep=',')
1,2,3
```
デフォルトの出力先は標準出力(sys.stdout)ですが、file引数でファイルオブジェクトを渡せば出力先をファイルに変更できます。
```pycon
>>> f = open('file.txt', 'w')
>>> print(1, 2, 3, file=f)
```
# print関数だけで十分なケース
- 文字列を`""`で囲う必要がない
- カンマや改行などエスケープする必要がある文字を含まない
# 参考
- Python3 ドキュメント
- チュートリアル
- [4.7.4. 引数リストのアンパック](https://docs.python.jp/3/tutorial/controlflow.html#unpacking-argument-lists)
- ライブラリーリファレンス
- 2. 組み込み関数
- [print](https://docs.python.jp/3/library/functions.html#print)
- [14.1. csv — CSV ファイルの読み書き](https://docs.python.jp/3/library/csv.html)