格式化CSV的数字

时间:2017-05-03 14:09:39

标签: python python-2.7

我开发了一个生成CSV文件的脚本。在检查文件时,某些单元格的解释不是我想要的方式..

E.g在我的python列表中,'02e4'的值自动格式化为2.00E + 04。

table = [['aa02', 'fb4a82', '0a0009'], ['02e4, '452ca2', '0b0004']]


ofile = open('test.csv', 'wb')
for i in range(0, len(table)):
     for j in range(0, len(table[i]):
           ofile.write(table[i][j] + ",")
     ofile.write("\n")

这给了我:

aa02         fb4a82    0a0009
2.00E+04     452ca2    0b0004

我尝试过使用csv.writer而不是writer = csv.writer(ofile, ...) 并从lib中提供属性(例如csv.QUOTE_ALL)...但它的输出与之前相同..

有没有办法使用CSV lib在写入之前自动将所有值格式化为字符串?

或者这不可能吗?

由于

2 个答案:

答案 0 :(得分:0)

尝试将csv writer中的quoting参数设置为csv.QUOTE_ALL。 有关详细信息,请参阅doc

import csv
with open('myfile.csv', 'wb') as csvfile:
    wtr = csv.writer(csvfile, quoting=csv.QUOTE_ALL)
    wtr.writerow(...)

虽然听起来问题可能在于您的csv查看器。 Excel有一个相当烦人的习惯,就是像你描述的那样自动格式化数据。

答案 1 :(得分:0)

如果你希望'02e4'在excel中显示为“02e4”,那么烦人的是你必须写一个带有三重双引号的csv:“”“02e4”“”。我不知道如何使用csv编写器执行此操作,因为它会将引号字符限制为字符。但是,您可以执行类似于原始尝试的操作:

table = [['aa02', 'fb4a82', '0a0009'], ['02e4', '452ca2', '0b0004']]

ofile = open('test.csv', 'wb')
for i in range(0, len(table)):
     for j in range(len(table[i])):
           ofile.write('"""%s""",'%table[i][j])
     ofile.write("\n")

如果在文本编辑器中打开,则csv文件将显示为:

"""aa02""","""fb4a82""","""0a0009""",
"""02e4""","""452ca2""","""0b0004""",

这会在Excel中生成以下结果:

Excel Double Quote Example Image

如果您想使用任何单个字符引用,可以使用csv模块,如下所示:

import csv

table = [['aa02', 'fb4a82', '0a0009'], ['02e4', '452ca2', '0b0004']]
ofile = open('test.csv', 'wb')
writer = csv.writer(ofile, delimiter=',', quotechar='|',quoting=csv.QUOTE_ALL)
for i in range(len(table)):
    writer.writerow(table[i])

文本编辑器中的输出将为:

|aa02|,|fb4a82|,|0a0009|
|02e4|,|452ca2|,|0b0004|

和Excel将显示:

Excel Pipe Quote Example Image