看起来像csv正在使用浮动.__str__而不是浮动.__repr__:
>>> print repr(1323494016.855676)
1323494016.855676
>>> print str(1323494016.855676)
1323494016.86
看着csv源,这似乎是一种硬连线行为。解决方法是在 csv 到达之前将所有浮点值转换为它们的 repr。使用类似的东西:d = dict((k, repr(v)) for k, v in d.items())
.
这是一个已完成的示例:
import sys, csv
d = {'time_final': 1323494016.8556759,
'time_init': 1323493818.0042379,
'time_lapsed': 198.85143804550171
}
d = dict((k, repr(v)) for k, v in d.items())
fieldnames = ('time_init', 'time_final', 'time_lapsed')
myWriter = csv.DictWriter(sys.stdout, fieldnames=fieldnames)
headers = dict( (n,n) for n in fieldnames )
myWriter.writerow(headers)
myWriter.writerow(d)
此代码产生以下输出:
time_init,time_final,time_lapsed
1323493818.0042379,1323494016.8556759,198.85143804550171
更精致的方法将注意只替换浮动:
d = dict((k, (repr(v) if isinstance(v, float) else str(v))) for k, v in d.items())
请注意,我刚刚为 Py2.7.3 修复了这个问题,所以将来它应该不会成为问题。看http://hg.python.org/cpython/rev/bf7329190ca6