Python的CSV作家错误的分隔符?

免责声明:我在欧洲。

根据这个页面 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')

这是因为csv.excel方言不能识别本地语言。 如果你想明确地使用分号作为分隔符,那么你需要明确地将分隔符传递给csv.open

 writer = csv.writer(open("data.csv", "wb"), delimiter=";") 

或者创build一个新的方言并注册

 class excel_semicolon(csv.excel): delimiter = ';' register_dialect("excel-semicolon", excel_semicolon) 

无论哪种情况,您都应该testing如何编写浮点数……我怀疑他们不会用您希望的欧洲格式(以逗号作为基数)编写,

excel方言由以下属性指定(在Lib/csv.py , 第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)