使用Python来追加CSV文件,我得到隔行数据。 我该如何解决?如何附加到CSV文件?
import csv
LL = [(1,2),(3,4)]
Fn = ("C:\Test.csv")
w = csv.writer(open(Fn,'a'), dialect='excel')
w.writerows(LL)
C:\test.csv
当打开这个样子的:
1,2
3,4
1,2
3,4
使用Python来追加CSV文件,我得到隔行数据。 我该如何解决?如何附加到CSV文件?
import csv
LL = [(1,2),(3,4)]
Fn = ("C:\Test.csv")
w = csv.writer(open(Fn,'a'), dialect='excel')
w.writerows(LL)
C:\test.csv
当打开这个样子的:
1,2
3,4
1,2
3,4
追加是风马牛不相及的问题;请注意,前两行(来自原始文件的行)也是双倍行距。
真正的问题是,您已经打开文件文本模式。
CSV是一种二进制格式,相信与否。 csv模块正如期望的那样,编写了名为“lineterminator”(应该是“rowseparator”)的\r\n
,但随后Windows C运行时会启动并用\r\n
替换\n
,以便在行之间有\r\r\n
。使用Excel的csv文件变得困惑
无论您是否在Windows上运行,都始终以二进制模式('rb','wb','ab')打开您的CSV文件。这样,您将获得预期的rowseparator(CR LF)甚至在* x盒子上,你的代码将是可移植的,并且嵌入在你的数据中的任何换行都不会变成其他东西(写作时)或导致戏剧(在输入时,当然提供它们被引用正确)
Oth呃问题:
(1)不要把你的数据放在你的根目录(C:\
)。 Windows在20世纪80年代继承了MS-DOS的分层文件系统。用它。 (2)如果您必须在您的代码中嵌入硬连接的文件名,请使用原始字符串r"c:\test.csv"
...如果您有"c:\test.csv"
,那么'\ t'将被解释为TAB字符;如果您拥有"c:\test.csv"
,类似问题\r
和\n
(3)Python手册中的示例比简洁而不是健壮的代码更加一致。
不要这样做:
w = csv.writer(open('foo.csv', 'wb'))
这样做:
f = open('foo.csv', 'wb')
w = csv.writer(f)
然后,当你完成,你必须f
可用,以便你可以做f.close()
以确保您的文件内容刷新到磁盘。更好:请阅读新的with
声明。
我在追加已创建的csv文件的同时,在Windows上运行时遇到类似的问题。
由于在这种情况下,以“二进制”模式编写和追加避免了为通过使用python脚本编写或附加的每一行添加额外的行。因此;
w = csv.writer(open(Fn,'ab'),dialect='excel')
什么问题?我不清楚...... – poke 2010-11-22 19:05:36
“我每隔一行都会收到一次数据,我该如何解决?”这是什么意思?你能粘贴样本输出与期望的样本输出吗? – Chris 2010-11-22 19:05:57
@poke,@Chris:OP在每个预期的数据行之后插入一个意外的空行。 – 2010-11-22 20:39:58