使用Python附加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
答案 0 :(得分:41)
追加与问题无关;注意前两行(来自原始文件的那些行)也是双倍行距。
真正的问题是您已在文本模式下打开文件。
CSV是一种二进制格式,信不信由你。 csv模块正如预期的那样将误导性命名的“lineterminator(应该是”rowseparator“)编写为\r\n
,但随后Windows C运行时启动并用\n
替换\r\n
,以便行之间有\r\r\n
。当你用Excel“打开”csv文件时,它会变得混乱
无论您是否在Windows上运行,始终以二进制模式('rb','wb','ab')打开CSV文件。这样,你甚至可以在* x盒子上获得预期的rowseparator(CR LF),你的代码将是可移植的,并且你的数据中嵌入的任何换行都不会被改成别的东西(写作时)或导致戏剧(输入时) ,当然提供它们是正确引用的。)
其他问题:
(1)不要将数据放在根目录(C:\
)中。 Windows在20世纪80年代继承了MS-DOS的分层文件系统。使用它。
(2)如果您必须在代码中嵌入硬连线文件名,请使用原始字符串r"c:\test.csv"
...如果您有"c:\test.csv"
,则'\ t'将被解释为TAB字符;与\r
和\n
(3)Python手册中的示例与简洁的代码相比更加简洁。
不要这样做:
w = csv.writer(open('foo.csv', 'wb'))
这样做:
f = open('foo.csv', 'wb')
w = csv.writer(f)
然后,当您完成后,您有f
可用,以便您可以f.close()
确保将文件内容刷新到磁盘。更好的是:阅读新的with
声明。
答案 1 :(得分:2)
在Windows上运行时,我遇到了类似的问题,即添加已创建的csv文件。
在这种情况下,以“二进制”模式写入和追加可以避免使用python脚本为每个写入或追加的行添加额外的行。因此;
w = csv.writer(open(Fn,'ab'),dialect='excel')