晴れときどき晴れ

プログラミングと日常についてマイペースにあげます

pythonでcsvファイルを整形したいが、一行間隔で空行を出力してしまいハマった話

書き込みたい値(outputdata)は

[
    ['0.0000704', '-6.875000E-5'],
    ['0.000070402', '-9.140625E-5'],
    ...
    ['time', 'value']
]

という形式になっています。

これをcsvモジュールでライターを作成し、サンプルと同じ形式でwriterowsメソッドを使用して書き込みました。
予測では

0.0000704 -6.875000E-5
0.000070402 -9.140625E-5
... ...
time value

となるはず...

ところが!!!

0.0000704 -6.875000E-5
空行 空行
0.000070402 -9.140625E-5
空行 空行
... ...
time value

と空行が間に挟まれて出力されてくる...

僕が書いたコードはこう
ちなみにPython3.3で実行している

outputdata = the_data #このブログの一番上に書いたリスト
with open(filename, 'w') as f:
    writer = csv.writer(f)
    writer.writerows(outputdata)

そして、結構ハマって見つけたやり方がこう

outputdata = the_data #このブログの一番上に書いたリスト
with open(filename, 'w', newline='') as f:    #newline=''を追加した
    writer = csv.writer(f)
    writer.writerows(outputdata)   

これでcsvの各行に空行を入れずに出力が出来た。

サンプルプログラム。

#空行を挟んでしまうパターン
import csv
outputdata = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
with open('sample1.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(outputdata)

#空行を挟まないパターン
import csv
outputdata = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
with open('sample2.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(outputdata)

実行環境

windows7
python3.3
office2013によってcsvファイルを開いた

反省

2.7のドキュメントで調べてしまったので、色々引っかかった