使用Python附加CSV文件,我每隔一行获取一次数据.我该如何解决?
import csv
LL = [(1,2),(3,4)]
Fn = ("C:\Test.csv")
w = csv.writer(open(Fn,'a'), dialect='excel')
w.writerows(LL)
Run Code Online (Sandbox Code Playgroud)
C:\test.csv
打开时看起来像这样:
1,2
3,4
1,2
3,4
Run Code Online (Sandbox Code Playgroud)
Joh*_*hin 42
追加与问题无关; 请注意前两行(来自原始文件的行)也是双倍行距.
真正的问题是您已在文本模式下打开文件.
无论信不信,CSV都是二进制格式.csv模块\r\n
正如预期的那样编写误导性命名的"lineterminator(应该是"rowseparator"),然后Windows C运行时启动并替换\n
with,\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'))
Run Code Online (Sandbox Code Playgroud)
做这个:
f = open('foo.csv', 'wb')
w = csv.writer(f)
Run Code Online (Sandbox Code Playgroud)
然后,当您完成后,您就f
可以使用f.close()
以确保将文件内容刷新到磁盘.更好的是:阅读新with
声明.
小智 5
在 Windows 上运行时,我在附加已创建的 csv 文件时遇到了类似的问题。
在这种情况下,以“二进制”模式写入和附加可以避免向使用 python 脚本写入或附加的每行添加额外的行。所以;
w = csv.writer(open(Fn,'ab'),dialect='excel')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38769 次 |
最近记录: |