DictWriterを使用して、辞書のデータをcsvファイルに出力しています。 CSVファイルの各データ行の間に空白行があるのはなぜですか?大したことではありませんが、私のデータセットは大きく、 "double-spacing"によってファイルの行数が2倍になるので行が多すぎるため、1つのcsvファイルに収まりません。
辞書に書き込むための私のコードは次のとおりです。
headers=['id', 'year', 'activity', 'lineitem', 'datum']
output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers)
output.writerow(dict((fn,fn) for fn in headers))
for row in rows:
output.writerow(row)
デフォルトでは、csv
モジュールのクラスは、Unixスタイル(\r\n
)ではなく、Windowsスタイルの行終端記号(\n
)を使用します。これが明らかに二重改行を引き起こしている可能性がありますか?
その場合は、DictWriter
コンストラクターでオーバーライドできます。
output = csv.DictWriter(open('file3.csv','w'), delimiter=',', lineterminator='\n', fieldnames=headers)
http://docs.python.org/library/csv.html#csv.writer から:
Csvfileがファイルオブジェクトの場合、違いが生じるプラットフォームでは「b」フラグを付けて開く必要があります。
つまり、ファイルを開くときに、「w」ではなく「wb」を渡します。
ファイルへの書き込みが完了したら、with
ステートメントを使用してファイルを閉じることもできます。
以下のテスト例:
from __future__ import with_statement # not necessary in newer versions
import csv
headers=['id', 'year', 'activity', 'lineitem', 'datum']
with open('file3.csv','wb') as fou: # note: 'wb' instead of 'w'
output = csv.DictWriter(fou,delimiter=',',fieldnames=headers)
output.writerow(dict((fn,fn) for fn in headers))
output.writerows(rows)
この行の「w」(書き込み)を変更します。
output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers)
'wb'(バイナリを書き込む)でこの問題を修正しました:
output = csv.DictWriter(open('file3.csv','wb'), delimiter=',', fieldnames=headers)
上記の元の投稿のコメントにあるソリューションの@dandrejvvの功績です。
私はあなたのスニペットをテストしましたが、ここには二重のスペースはありません。行末は\r\n
であるため、あなたのケースでチェックするのは次のとおりです。
(値に\ nを付けても、DictWriterは自動的に値を引用することに注意してください。)