Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python csv写入程序错误的分隔符?_Python_Excel_Csv_Localization - Fatal编程技术网

Python csv写入程序错误的分隔符?

Python csv写入程序错误的分隔符?,python,excel,csv,localization,Python,Excel,Csv,Localization,免责声明:我在欧洲 根据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 但它使用逗号。为什么会这样loca

免责声明:我在欧洲

根据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')

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

我看不到任何提示,这在某种程度上取决于语言环境-因此,您总是会得到带有默认方言的

但这很容易解决,例如

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

writer = csv.writer(open("data.csv", "wb"), dialect=excel_semicolon)

这是因为csv.excel方言不支持区域设置。如果希望显式使用分号作为分隔符,则需要将分隔符显式传递给csv.open as

writer = csv.writer(open("data.csv", "wb"), delimiter=";")
或者创建一个新的方言并注册它

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

在这两种情况下,您都应该测试浮点数是如何写入的。。。我怀疑它们不会以您想要的欧洲格式编写(以逗号为基数)

当然很容易修复,但我认为如果Python包含excel方言,它将正确实现它=S@miku: -1. 在第二条语句之后,
csv.excel.delimiter
指的是
';'而不是
,'
。请阅读@Donkopotamus的答案。我不明白投票结果。这是一个相关的问题,它表明了研究的努力,而解决方案并不是那么明显。各种不相关的问题:你是否阅读了你引用的“本页”中的第四个解决方案?此SSV文件的预期使用者是谁?人员还是计算机?他们会用它做什么?您是否考虑过编写一个XLS或XLSX文件(可以谨慎地使其与区域设置无关)?
class excel_semicolon(csv.excel):
    delimiter = ';'
register_dialect("excel-semicolon", excel_semicolon)