我正在使用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()
Run Code Online (Sandbox Code Playgroud)
其中dictrows是一个字典列表,而fieldnames提供了应序列化为文件的标题.
我的字典列表(dictrows)中的一些值是数字 - 例如浮点数,我想指定这些值的格式.例如,我可能希望使用"%.2f"而不是完全精度序列化浮点数.理想情况下,我想指定某种映射,说明如何格式化每种类型,例如
{float: "%.2f"}
Run Code Online (Sandbox Code Playgroud)
如果你看到浮动,请用%.2f格式化它.是否有捷径可寻?我不想将DictWriter或类似的任何复杂的子类化 - 这似乎是非常通用的功能.
如何才能做到这一点?
我能想到的唯一其他解决方案是:不要乱用DictWriter的格式,只需使用十进制包将浮点数的小数精度指定为%.2,这将导致序列化.不知道这是否是更好的解决方案?
非常感谢您的帮助.
class TypedWriter:
"""
A CSV writer which will write rows to CSV file "f",
which uses "fieldformats" to format fields.
"""
def __init__(self, f, fieldnames, fieldformats, **kwds):
self.writer = csv.DictWriter(f, fieldnames, **kwds)
self.formats = fieldformats
def writerow(self, row):
self.writer.writerow(dict((k, self.formats[k] % v)
for k, v in row.iteritems()))
def writerows(self, rows):
for row in rows:
self.writerow(row)
Run Code Online (Sandbox Code Playgroud)
没有测试过.
| 归档时间: |
|
| 查看次数: |
2592 次 |
| 最近记录: |