Python csv writer错误的分隔符?

orl*_*rlp 12 python csv excel localization

免责声明:我在欧洲.

根据此页面, Excel使用分号;作为欧洲的默认分隔符来"防止与小数点逗号冲突".

现在,我有这个Python代码:

import csv

data = [["test", "data"], ["foo", "bar"]]
writer = csv.writer(open("data.csv", "wb"), dialect="excel")
writer.writerows(data)
Run Code Online (Sandbox Code Playgroud)

哪个应生成此文件:

test;data
foo;bar
Run Code Online (Sandbox Code Playgroud)

但它使用逗号.为什么会这样?locale.getdefaultlocale()回报('nl_NL', 'cp1252').

don*_*mus 17

这是因为csv.excel方言不能识别语言环境.如果您希望明确使用分号作为分隔符,则需要将分隔符明确地传递给csv.open as

writer = csv.writer(open("data.csv", "wb"), delimiter=";")
Run Code Online (Sandbox Code Playgroud)

或者创建一个新的方言并进行注册

class excel_semicolon(csv.excel):
    delimiter = ';'
register_dialect("excel-semicolon", excel_semicolon)
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,你应该测试浮点数是如何写的......我怀疑它们不会以你想要的欧洲格式编写(用逗号作为基数)


mik*_*iku 7

excel方言由以下属性指定(在Lib/csv.py,第57行):

delimiter = ','
quotechar = '"'
doublequote = True
skipinitialspace = False
lineterminator = '\r\n'
quoting = QUOTE_MINIMAL
Run Code Online (Sandbox Code Playgroud)

我没有看到任何提示,这在某种程度上依赖于语言环境 - 因此你总是会,使用默认方言.

但这很容易解决,例如

class excel_semicolon(csv.excel):
    delimiter = ';'

writer = csv.writer(open("data.csv", "wb"), dialect=excel_semicolon)
Run Code Online (Sandbox Code Playgroud)