如何附加到CSV文件?

时间:2010-11-22 19:04:00

标签: python csv

使用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

2 个答案:

答案 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')