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のドキュメントで調べてしまったので、色々引っかかった