csv.write在写入csv时跳过行

时间:2012-07-25 15:06:00

标签: python csv

我正在尝试通过以下

写入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文件时,第一行是空的,第二行是我的标题,第三行是空的,第四行显示条目1,2和3.为什么它>在进行输入之前跳过一行?

编辑:使用python 3.2

5 个答案:

答案 0 :(得分:35)

解决方案是指定" 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()

答案 1 :(得分:5)

二十个quatloos说你在windows下运行(好吧,一百个,因为你的文件名为P:\test.csv)。你可能会得到额外的\r

[编辑]

好的,因为使用二进制模式会导致其他问题,所以:

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

答案 2 :(得分:0)

是否可以在追加模式下打开输出文件?

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

而不是写模式?如果多次运行程序,则每次运行的输出都将在该文件中...

答案 3 :(得分:0)

我遇到了这个问题,这是因为我正在使用\ n \ r。我改变到\ n和现在运转。

答案 4 :(得分:-1)

您需要向'open()'函数传递一个附加参数:

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

这将避免跳过行。