Python csv.writerow()表现得有点时髦

时间:2013-08-07 21:17:20

标签: python csv

根据我的研究,csv.writeRow应该列入一个列表,然后将其写入给定的csv文件。这是我试过的:

from csv import writer
with open('Test.csv', 'wb') as file:
        csvFile, count = writer(file), 0
        titles = ["Hello", "World", "My", "Name", "Is", "Simon"]
        csvFile.writerow(titles)

我只是想写它,以便每个单词都在不同的列中。

但是,当我打开它创建的文件时,我收到以下消息:

enter image description here

在按下继续之后,我收到一条消息,说该文件已损坏,或者是一个SYLK文件。然后我可以打开文件,但只有在每次打开文件时都会经过两条错误消息。

为什么会这样?

谢谢!

1 个答案:

答案 0 :(得分:15)

如果前两个字符为“ID”,则Excel将假设csv文件为SYLK,这是documented issue

冒险进入意见领域 - 它不应该,但Excel认为它比扩展知道更好。公平地说,人们希望它能够找出扩展确实错误的情况,但是在这样的情况下,假设扩展是错误的,然后进一步假设文件损坏,如果它没有出现腐败,如果解释根据扩展只是令人难以置信的。

@John Y指出:

  

需要注意的一件事:由@PeterDeGlopper链接的Microsoft问题给出的“解决方法”是(手动)将撇号添加到文件中。 (这也是Web上常见的建议,包括StackOverflow,试图强制将CSV数字视为字符串而不是数字。)这不是我称之为好的建议,因为它会为您的数据注入一个文字撇号

@DSM建议在作者身上使用quoting=csv.QUOTE_NONNUMERIC。 Excel不会被以"ID"而不是ID开头的文件混淆,所以如果其他可以使用CSV的工具接受该引用级别,这可能是除了忽略Excel之外的最佳解决方案混乱。