我有看起来像的数据
[('A',5.3748),('B',8.324203),('C',3.492)]
我使用以下几行将其保存到 csv:
with open('output.csv','wb') as fp:
a = csv.writer(fp,delimiter = ",")
a.writerows(data)
就像一个魅力,除了我想只用两位小数显示我的值。在我的代码前面,我压缩了两个列表来获取数据。因此,如果需要,我可以在之前进行更改。
谢谢!
我有看起来像的数据
[('A',5.3748),('B',8.324203),('C',3.492)]
我使用以下几行将其保存到 csv:
with open('output.csv','wb') as fp:
a = csv.writer(fp,delimiter = ",")
a.writerows(data)
就像一个魅力,除了我想只用两位小数显示我的值。在我的代码前面,我压缩了两个列表来获取数据。因此,如果需要,我可以在之前进行更改。
谢谢!
您可以使用字符串格式化语法:
with open('output.csv','wb') as fp:
a = csv.writer(fp,delimiter = ",")
a.writerows(map(lambda t: (t[0], "%.2f" % t[1]), data))
诀窍就在这里:
>> "%.2f" % a_number
将打印带有两位小数的数字,而
map(lambda t: (t[0], "%.2f" % t[1]), data)
将这个转换应用到列表中的每个元组data
。(见http://docs.python.org/2/library/functions.html#map)
如果您可以隔离要四舍五入的数字,则可以将其格式化为小数点后两位并将其存储为如下字符串:
"%.2f" % myNum
from itertools import imap
with open('output.csv','wb') as fp:
a = csv.writer(fp,delimiter = ",")
a.writerows(imap(lambda x: (x[0], round(x[1], 2)), data))
尝试使用以下格式格式化小数str.format()
:
temp = [('A',5.3748),('B',8.324203),('C',3.492)]
newlist = []
for a, b in temp:
newlist.append((a, "{0:.2f}".format(b)))
作为列表理解,您将获得:
data = [('A',5.3748),('B',8.324203),('C',3.492)]
data = [(a, "{0:.2f}".format(b)) for a, b in temp]
正如@JonClements 指出的那样,您可以替换"{0:.2f}".format(b)
为format(b, '.2f')
. 在这种情况下,这可能是更具可读性的方法。
您还可以使用 python 的 round() 方法。
round(5.3748, 2)
将其与 csv 编写器一起使用的优点是它保持其数字类型,而不是转换为字符串。这会影响选项,例如在 csv 文件中引用非数字。
如果您不需要担心此类格式化选项,我个人更喜欢将其格式化为字符串,因为即使它们为零,它也会对齐正确的小数位数。即 5.3748 到 "5.3700" 而不是 5.37
您可以按如下方式格式化列表元素
linux:~ # python
>>> l=[('A',5.3748),('B',8.324203),('C',3.492)]
>>> l=[ (x[0], "%.2f" % x[1]) for x in l]
>>> l
[('A', '5.37'), ('B', '8.32'), ('C', '3.49')]