数字格式化CSV

2024-10-02 04:33:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我开发了一个生成CSV文件的脚本。在检查文件时,有些单元格的解释不是我想要的。。你知道吗

例如,在我的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\u全部)... 但它的输出和以前一样。。你知道吗

有没有一种方法可以使用CSV lib在写入之前自动将所有值格式化为字符串?你知道吗

或者这是不可能的?你知道吗

谢谢


Tags: 文件csvin脚本forlenlibtable
2条回答

尝试将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有一个很烦人的习惯,就是像你描述的那样自动格式化数据。你知道吗

如果希望“02e4”在excel中显示为“02e4”,那么令人恼火的是,您必须用三个双引号编写csv:“02e4”。我不知道如何使用csv writer,因为它将引号字符限制为一个字符。但是,您可以做一些类似于您最初尝试的事情:

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

相关问题 更多 >

    热门问题