从csv文件中删除货币值列中的引号?
我的CSV:
" 2102"|"LINDOMAR MARTINS DE FREITAS"|"RUA 02 NR.270"|"FORMOSA"|"98130860"|"TIMON"|"MA"|"ADMINISTRATIVO"|"FATURISTA"|"LINDOMAR"|"S"|20130102|20130102|20130102|115.00|"TDC"|"4"|"88792334"|""|""|""
我想要一个值为115.00
的列没有引号。
L = []
reader = csv.reader(open(infile), csv.QUOTE_NONNUMERIC, delimiter='|', quotechar='"')
for row in reader:
L.append(tuple(row))
在Python列表L
列中,值115.00
因此为'115 .00 '
。我认为该方法是csv.header
在所有列上添加引号。
答案 0 :(得分:2)
你可以在相应的列上使用float。但请注意,由于舍入错误,浮动通常不会用于货币值。 Python有一个专用的Decimal类型,它提供了优于纯浮点数的优点,值得注意的是:
...十进制数字可以准确表示。相反,像1.1和2.2这样的数字在二进制浮点中没有精确的表示。最终用户通常不希望1.1 + 2.2显示为3.3000000000000003,就像二进制浮点一样。
#!/usr/bin/env python
# consider: from decimal import Decimal
from pprint import pprint
import csv
if __name__ == '__main__':
L = []
reader = csv.reader(open("infile.csv"),
csv.QUOTE_NONNUMERIC, delimiter='|', quotechar='"')
for row in reader:
# consider: L.append( tuple( row[:14] + [Decimal(row[14])] + row[15:] ))
L.append( tuple( row[:14] + [float(row[14])] + row[15:] ))
pprint(L)
哪会产生:
[(' 2102',
'LINDOMAR MARTINS DE FREITAS',
'RUA 02 NR.270',
'FORMOSA',
'98130860',
'TIMON',
'MA',
'ADMINISTRATIVO',
'FATURISTA',
'LINDOMAR',
'S',
'20130102',
'20130102',
'20130102',
115.0,
'TDC',
'4',
'88792334',
'',
'',
'')]