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')
。
2 个回答
8
这个 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)
25
这是因为csv.excel这种格式不考虑地区设置。如果你想明确使用分号作为分隔符,那么你需要直接把分隔符传给csv.open,像这样:
writer = csv.writer(open("data.csv", "wb"), delimiter=";")
或者你可以创建一个新的格式并注册它:
class excel_semicolon(csv.excel):
delimiter = ';'
register_dialect("excel-semicolon", excel_semicolon)
无论哪种方式,你都应该测试一下浮点数是怎么写的……我怀疑它们不会按照你想要的欧洲格式来写(也就是用逗号作为小数点)。