使用 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 忽略小数分隔符的主要内容,如果未能解决你的问题,请参考以下文章

从csv文件导入python时如何替换数字

108.生成和下载csv文件

如何使用CLI命令在输入文件参数上运行Python脚本来生成输出文件

从 CSV 文件生成 C++ 头文件的 python 脚本(用于数组声明)

python 读取多个csv文件中某一列,并生成一个新csv文件

怎么用Python生成随机函数写入CSV文件,大佬们帮帮忙