3

我正在提供一行数据以写入 csv 文件。它们大多是浮点型数字。但是当它写入 csv 文件时,单元格默认为自定义格式。所以如果我有一个像 3.25 这样的输入数字,它会打印为“Mar 25”。我怎样才能避免这种情况?
这是一段代码:

data = [0.21, 3.25, 25.9, 5.2]  
f = open('Boot.csv','w')  
out = csv.writer(f, delimiter=';', quoting=csv.QUOTE_NONE)  
out.writerow(data)  
4

6 回答 6

5

csv模块正在很好地写入数据 - 我猜您正在 Excel 中打开它以查看结果,并且 Excel 决定将其自动格式化为日期。

这是一个 excel 问题,您需要通过将其更改为 Text (或任何非通用的)来告诉它不要使用该字段

如果您正在编写 Excel 数据,您可能想查看该xlwt模块(查看非常有用的站点http://www.python-excel.org/) - 那么您的值类型不会那么容易波动。

于 2012-11-14T11:12:32.733 回答
3

这不是问题,只是 MS Excel 试图“帮助”。如果您要以编程方式进一步处理输出 csv 文件,则不会有任何问题。

如果您必须在 Excel 中处理/查看数据,您可能需要引用所有数据(通过使用 csv.QUOTE_ALL 而不是 csv.QUOTE_NONE,在这种情况下,Excel 应将所有内容视为文本,而不是试图“有帮助”。

于 2012-11-14T12:15:25.467 回答
1

这不是csv. csv无非是逗号分隔的值。如果你在记事本中打开文件,它会如你所愿。

当您在 excel 中打开它时,它会猜测每个值代表什么,因为此信息不是也不能在 CSV 文件中编码。无论出于何种原因,excel 决定3.25代表一个日期,而不是一个数字。

于 2012-11-14T11:16:58.543 回答
0

这不是您编写的代码的问题;它使用 Excel(您可能会使用它来打开 CSV)——它被解释3.25March 25. 您可以通过选择受影响的单元格,右键单击并按“设置单元格格式”,然后在“数字”选项卡中选择“数字”作为您的类别来解决此问题,确保显示正确的小数位数。

于 2012-11-14T15:08:08.767 回答
0

尝试使用不会被误解为日期的格式:

out.writerow(['%.12f' % item for item in data])

这将包括尾随零,因此 Excel 应始终将其解析为数字。

于 2012-11-14T11:35:52.253 回答
0

如果您的所有问题都是 Excel 奇怪地导入 CSV,那么您应该直接编写 XLSX 文件而不是 CSV。这使您可以完全控制单元格内容的解释。

到目前为止,我用 Python 编写 Excel 文件的最佳包是openpyxl(甚至被更广泛传播的 xlwt 包的作者推荐

取自 openpyxl 文档的一些示例代码:

from openpyxl import Workbook
wb = Workbook()

# grab the active worksheet
ws = wb.active

# Data can be assigned directly to cells
ws['A1'] = 42

# Rows can also be appended
ws.append([1, 2, 3])

# Python types will automatically be converted
import datetime
ws['A2'] = datetime.datetime.now()

# Save the file
wb.save("sample.xlsx")
于 2017-08-23T12:11:37.383 回答