【发布时间】:2010-06-06 00:18:09
【问题描述】:
我正在使用 csv.DictWriter 从一组字典中输出 csv 文件。我使用以下功能:
def dictlist2file(dictrows, filename, fieldnames, delimiter='\t',
lineterminator='\n'):
out_f = open(filename, 'w')
# Write out header
header = delimiter.join(fieldnames) + lineterminator
out_f.write(header)
# Write out dictionary
data = csv.DictWriter(out_f, fieldnames,
delimiter=delimiter,
lineterminator=lineterminator)
data.writerows(dictrows)
out_f.close()
其中 dictrows 是一个字典列表,而 fieldnames 提供了应该序列化为文件的标题。
我的字典列表 (dictrows) 中的一些值是数字 - 例如浮动,我想指定这些的格式。例如,我可能希望使用“%.2f”而不是全精度来序列化浮点数。理想情况下,我想指定某种映射来说明如何格式化每种类型,例如
{float: "%.2f"}
这表示如果您看到一个浮点数,请使用 %.2f 对其进行格式化。是否有捷径可寻?我不想继承 DictWriter 或任何类似的复杂东西——这似乎是非常通用的功能。
如何做到这一点?
我能想到的唯一其他解决方案是:不要弄乱 DictWriter 的格式,只需使用 decimal 包将浮点数的小数精度指定为 %.2,这将导致被序列化。不知道这是不是更好的解决方案?
非常感谢您的帮助。
【问题讨论】: