2012-05-27 21 views
0

我正在導入csv文件,其中一個價格缺少零。python將數字轉換爲美元格式

所需的輸出: 12.10

電流輸出: 12.1

我將如何執行零包含在我的數據?

是我迄今所做的:

#!/usr/bin/python 

import csv 
import sys 
import argparse 

#parsing command line options 
parser = argparse.ArgumentParser(prog='desc', description=__doc__) 
parser.add_argument('-i', '--input', help='Input file', nargs='?', type=argparse.FileType('r'), default=sys.stdin) 
parser.add_argument('-o', '--output', help='Output file', nargs='?', type=argparse.FileType('w'), default=sys.stdout) 
args = parser.parse_args(sys.argv[1:]) 
inf, outf = args.input, args.output 
outf = csv.writer(outf) 

print 'Loading %s file into memory' % inf.name 
data = [] 
tmp = 0.00 
for i, line in enumerate(csv.reader(inf)): 
    if i == 0: 
     outf.writerow(line) 
     continue 
    price = line[4] 
    price = price.replace('.', '') 
    # print price 
    if (price < 100): 
     tmp = price 
     tmp = tmp * 10 
     print tmp 

回答

4

Format你的持股量與2位小數的字符串:

>>> '{:.2f}'.format(12.1) 
'12.10' 

PS:你並不需要使用重型enumerate功能,跳過你csv文件的標題和改寫爲這樣的在輸出中。你可以簡單地直接寫在第一行:

csvin = csv.reader(inf) 
outf.writerow(csvin.next()) # header line 1 
for line in csvin: # iterator goes on from line 2 
    price = line[4] 
    #... 
+0

是否可以用2位小數保存該變量?每次我在libreoffice這樣的csv程序中打開它,最後的0消失。 – chrisjlee

+0

如果使用Excel或LibreOffice打開csv生成的文件,它們將解釋您的文件,並且尾隨的零將在電子表格中消失。如果你想保留尾隨零,你應該直接生成一個excel文件或一個odf文件 – Boud

3

兩個選項:

  1. 使用類型,其中小數位關係,如decimal.Decimal

  2. 現在忽略它,並在輸出上使用指定兩位小數的格式,如%.2f

2

而不是

print tmp 

嘗試

print '{0:.2f}'.format(tmp) 

這迫使保留兩位小數進行格式化的浮動。

1
>>> price=12.10 
>>> price 
12.1 
>>> print('{0:.2f}'.format(price)) 
12.10 
+0

這給了我以下錯誤:'ValueError:未知的格式代碼'f'類型爲'str''的對象 – chrisjlee

+0

'if(price <100):'你試圖比較一個字符串與一個int對象? 首先將它轉換爲「float()」或「int()」,這就是爲什麼會出現錯誤。 –

+0

啊我明白了。謝謝。 – chrisjlee