使用python将csv单元格格式化为文本

时间:2012-11-14 11:08:14

标签: python text csv format

我提供了一行数据来写入csv文件。它们大多是浮点型数字。但是当它写入csv文件时,单元格默认为自定义格式。因此,如果我有一个像3.25的输入数字,它打印为“3月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)  

6 个答案:

答案 0 :(得分:4)

csv模块正在编写数据 - 我猜你是在Excel中打开它来查看结果,并且Excel决定将其自动格式化为日期。

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

如果您正在撰写Excel数据,您可能需要查看xlwt模块(查看非常有用的网站http://www.python-excel.org/) - 然后您的价值类型将不会那么容易波动。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

这不是csv的一部分。 csv只不过是以逗号分隔的值。如果你在记事本中打开文件,它就会像你期望的那样。

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

这对你编写的代码来说不是问题;这是Excel(您可能用来打开CSV) - 它将3.25解释为March 25。您可以通过选择受影响的单元格,右键单击并按“格式化单元格”,然后在“数字”选项卡中选择“数字”作为类别来确定这一点,确保显示正确的小数位数。

答案 5 :(得分:0)

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

到目前为止,我用于在Python中编写Excel文件的最佳软件包是openpyxl(甚至是更广泛的xlwt软件包的作者推荐)。

从openpyxl docs中获取的一些示例代码:

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")