根据我的研究,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)
我只是想写它,以便每个单词都在不同的列中。
但是,当我打开它创建的文件时,我收到以下消息:
在按下继续之后,我收到一条消息,说该文件已损坏,或者是一个SYLK文件。然后我可以打开文件,但只有在每次打开文件时都会经过两条错误消息。
为什么会这样?
谢谢!
答案 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之外的最佳解决方案混乱。