2017-05-03 94 views
0

我开发了一个生成CSV文件的脚本。在检查文件时,某些单元格被解释为不是我想要的方式。格式化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库自动格式化所有我的值作为字符串之前,它被写入?

或者这是不可能的?

感谢

回答

0

尝试在你的CSV作家设置报价参数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有一个相当烦人的习惯,像你所描述的那样自动格式化数据。

+0

它不工作..尝试: 表= [ 'EE02' ,''ffsssd'],['02e4','00009']] with open('myfile.csv','wb')as csvfile: writer = csv (0,len(table [i])): csvfile.write(table [i]).writer(csvfile,quoting = csv.QUOTE_ALL) for i in range(0,len(table)): ] [j] +“,”) csvfile.write(“\ n”)它的生成02e4仍然是2。00E + 04 – arsenal88

+0

这样的代码段在注释中不起作用,您应该尝试编辑您的问题。但问题是你没有用csv编写器写入文件。而不是'csvfile.write(...)',使用'writer.writerow()'。阅读我链接到的文件。 – Anddrrw

+0

我也试过用writer.writerow(),输出也完全一样:( – arsenal88

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