2013-10-07 191 views
1

我有數據,看起來像將列表保存到csv,並在python中保留兩位十進制數字?

[('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) 

作品一樣,不過,我想只顯示我的價值魅力兩位十進制數字。在我的代碼之前,我壓縮了兩個列表以獲取數據。所以如果需要的話,我可以在之前做出改變。

謝謝!

+1

你可以把你所有的花車成格式化字符串,這些應該正確保存。 – thegrinner

+0

我可以一次完成整個列表嗎?還是我需要一個循環? – marc

+0

取決於「*顯示我的值*」的含義......如果您打開文件到Excel或類似文件,那麼最好使用可用的工具來格式化數據的顯示,而不是截斷數據輸出...否則 - 字符串格式是正確的方法 –

回答

1

如果你可以隔離要舍入的數量,你可以把它格式化到小數點後兩位,並存儲爲一個像這樣的字符串:

"%.2f" % myNum 
+0

完美!爲我工作。謝謝。 – marc

0
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)) 
0

嘗試使用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所述,您可以用format(b, '.2f')代替"{0:.2f}".format(b)。在這種情況下,這可能是更可讀的方法。

+1

我會試圖使用'format(b,'.2f')'而不是 –

+0

@JonClements良好的調用,這是更可讀。 – thegrinner

3

您可以使用字符串格式化語法:

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

0

可以格式化列表元素如下

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')] 
相關問題