我开发了一个生成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在写入之前自动将所有值格式化为字符串?
或者这不可能吗?
由于
答案 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中生成以下结果:
如果您想使用任何单个字符引用,可以使用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将显示: