1. tag1216

    Posted

    tag1216
Changes in title
+Python3ではcsvモジュールを使わなくてもCSVを出力できる
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,83 @@
+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)
+
+