使用 Python 生成的 CSV 文件时,Excel 忽略小数分隔符
Posted
技术标签:
【中文标题】使用 Python 生成的 CSV 文件时,Excel 忽略小数分隔符【英文标题】:Excel disregards decimal separators when working with Python generated CSV file 【发布时间】:2015-09-01 21:14:58 【问题描述】:我目前正在尝试在 python 中编写一个 csv 文件。格式如下:
1; 2.51; 12
123; 2.414; 142
编辑:我已经在我的 CSV 中获得了上述格式,所以 python 代码似乎没问题。这似乎是一个 excel 问题,可以通过更改 @chucksmash 提到的设置来解决。
但是,当我尝试使用 excel 打开生成的 csv 文件时,它无法识别小数分隔符。 2.414在excel中被视为2414。
csvfile = open('C:/Users/SUUSER/JRITraffic/Data/data.csv', 'wb')
writer = csv.writer(csvfile, delimiter=";")
writer.writerow(some_array_with_floats)
【问题讨论】:
这听起来像是 Excel 配置问题。在欧洲,.
和 ,
字符的使用与美国人的预期相反(例如 2.414,0
而不是 2,414.0
。尝试更改语言环境:Excel change decimal separator
@chucksmash 这解决了问题,谢谢。如果您将其发布为答案,我可以接受。
【参考方案1】:
您是否检查了 csv 文件是否按照您的需要正确生成?此外,尝试指定您在导入/打开文件时用于 csv 文件的分隔符。在这种情况下,它是一个分号。
【讨论】:
【参考方案2】:对于python 3,我认为您上面的代码也会遇到TypeError,这可能是问题的一部分。
我刚刚用你的 open 方法修改为“w”而不是“wb”,因为数组有浮点数而不是二进制数据。这似乎产生了您正在寻找的结果。
csvfile = open('C:/Users/SUUSER/JRITraffic/Data/data.csv', 'w')
【讨论】:
并非如此,根据 csv.writer 文档“如果 csvfile 是文件对象,则必须在不同的平台上使用‘b’标志打开它。”换句话说,“b”是安全的选择,docs.python.org/2/library/csv.html#csv.writer 的所有作者示例都使用“b”,这对我来说总是很好。 'w' 创建 Excel 文件,其中包含数据的行之间的空白行。使用 'wb' 可以解决此问题。【参考方案3】:一个丑陋的解决方案,如果你真的想使用;
作为分隔符:
import csv
import os
with open('a.csv', 'wb') as csvfile:
csvfile.write('sep=;'+ os.linesep) # new line
writer = csv.writer(csvfile, delimiter=";")
writer.writerow([1, 2.51, 12])
writer.writerow([123, 2.414, 142])
这将产生:
sep=;
1;2.51;12
123;2.414;142
Excel 可以很好地识别。
我个人会用,
作为分隔符,在这种情况下你不需要第一行,所以你基本上可以:
import csv
with open('a.csv', 'wb') as csvfile:
writer = csv.writer(csvfile) # default delimiter is `,`
writer.writerow([1, 2.51, 12])
writer.writerow([123, 2.414, 142])
Excel 会识别正在发生的事情。
【讨论】:
【参考方案4】:一种方法是在编写器中指定 dialect=csv.excel。例如:
a = [[1, 2.51, 12],[123, 2.414, 142]]
csvfile = open('data.csv', 'wb')
writer = csv.writer(csvfile, delimiter=";", dialect=csv.excel)
writer.writerows(a)
csvfile.close()
除非 Excel 已配置为使用分号作为其默认分隔符,否则需要使用 Data/FromText 导入 data.csv 并在“文本导入向导”步骤 2 屏幕中指定分号作为分隔符。
csv.Dialect 为 Dialect 类提供的文档很少。有关它的更多信息,请参阅 PyMOTW 关于 Python csv 模块的“csv – Comma-separated value files”文章中的Dialects。有关 csv.writer() 的更多信息,请访问https://docs.python.org/2/library/csv.html#csv.writer。
【讨论】:
以上是关于使用 Python 生成的 CSV 文件时,Excel 忽略小数分隔符的主要内容,如果未能解决你的问题,请参考以下文章
如何使用CLI命令在输入文件参数上运行Python脚本来生成输出文件
从 CSV 文件生成 C++ 头文件的 python 脚本(用于数组声明)