我正在导入一个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
答案 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)
两个选项:
使用小数位重要的类型,例如decimal.Decimal
。
暂时忽略它,输出时使用指定两个小数位的格式,例如%.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