python将数字转换为美元格式

时间:2012-05-27 21:16:45

标签: python csv formatting

我正在导入一个csv文件,其中一个价格缺少零。

期望的输出: 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 个答案:

答案 0 :(得分:5)

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]
    #...

答案 1 :(得分:3)

两个选项:

  1. 使用小数位重要的类型,例如decimal.Decimal

  2. 暂时忽略它,输出时使用指定两个小数位的格式,例如%.2f

答案 2 :(得分:2)

而不是

print tmp

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

这会强制浮动格式化为两位小数。

答案 3 :(得分:1)

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