0

我正在导入一个 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

4 回答 4

5

将浮点数格式化为带 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]
    #...
于 2012-05-27T21:22:04.383 回答
3

两种选择:

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

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

于 2012-05-27T21:21:55.947 回答
2

代替

print tmp

尝试

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

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

于 2012-05-27T21:22:41.003 回答
1
>>> price=12.10
>>> price
12.1
>>> print('{0:.2f}'.format(price))
12.10
于 2012-05-27T21:23:56.333 回答