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

编辑:使用 python 3.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

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

[编辑]

好的,既然使用二进制模式会导致其他问题,那么这个怎么样:

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 回答
0

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

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

这将防止它跳线。

于 2019-05-08T20:50:05.070 回答
-1

我遇到了这个问题,这是因为我使用的是\n\r。我更改为 \n,它现在正在工作。

于 2019-01-31T19:41:35.277 回答