26

次の方法でcsvファイルに書き込もうとしています

file = open('P:\test.csv', 'a') 

fieldnames = ('ItemID', 'Factor', 'FixedAmount')
wr = csv.DictWriter(file, fieldnames=fieldnames)
headers = dict((n, n) for n in fieldnames)

wr.writerow(headers)
wr.writerow({'ItemID':1, 'Factor': 2, 'FixedAmount':3})

ただし、csvファイルを見ると、最初の行は空で、2番目の行はヘッダーで、3番目の行は再び空で、4番目の行にはエントリ1、2、3が表示されます。エントリーしますか?

編集:Python3.2を使用

4

5 に答える 5

50

解決策は、コンストラクターで「lineterminator」パラメーターを指定することです。

file = open('P:\test.csv', 'w')

fields = ('ItemID', 'Factor', 'FixedAmount')
wr = csv.DictWriter(file, fieldnames=fields, lineterminator = '\n')

wr.writeheader()
wr.writerow({'ItemID':1, 'Factor': 2, 'FixedAmount':3})
file.close()
于 2012-07-25T15:14:29.373 に答える
11

20 quatloosは、ウィンドウの下で実行していることを示しています(ファイルの名前を考えると、100ですP:\test.csv)。おそらく余分な\rsを取得しています。

[編集]

さて、バイナリモードを使用すると他の問題が発生するので、これはどうですか?

file = open('P:\test.csv', 'w', newline='')
于 2012-07-25T15:25:24.487 に答える
0

出力ファイルを追加モードで開いている可能性がありますか?

file = open('P:\test.csv', 'a') 
#                           ^

書き込みモードの代わりに?プログラムを数回実行すると、すべての実行からの出力がそのファイルに含まれます...

于 2012-07-25T15:11:41.497 に答える