免责声明:我在欧洲。
根据this page Excel在欧洲使用分号;
作为默认分隔符来“防止与小数点逗号冲突”。
现在,我有这个Python代码:
import csv
data = [["test", "data"], ["foo", "bar"]]
writer = csv.writer(open("data.csv", "wb"), dialect="excel")
writer.writerows(data)
哪个应生成此文件:
test;data
foo;bar
但它使用逗号。为什么会这样? locale.getdefaultlocale()
会返回('nl_NL', 'cp1252')
。
答案 0 :(得分:16)
这是因为csv.excel方言不能识别语言环境。如果您希望明确使用分号作为分隔符,则需要将分隔符明确地传递给csv.open
writer = csv.writer(open("data.csv", "wb"), delimiter=";")
或创建新方言并注册
class excel_semicolon(csv.excel):
delimiter = ';'
register_dialect("excel-semicolon", excel_semicolon)
在任何一种情况下,你都应该测试浮点数是如何写的......我怀疑它们不会以你想要的欧洲格式编写(用逗号作为基数)
答案 1 :(得分:6)
excel
方言由以下属性指定(Lib/csv.py
,line 57):
delimiter = ','
quotechar = '"'
doublequote = True
skipinitialspace = False
lineterminator = '\r\n'
quoting = QUOTE_MINIMAL
我没有看到提示,这在某种程度上依赖于语言环境 - 因此你总是会使用默认方言获得,
。
但这很容易解决,例如
class excel_semicolon(csv.excel):
delimiter = ';'
writer = csv.writer(open("data.csv", "wb"), dialect=excel_semicolon)