从csv文件中删除货币值列中的引号?

时间:2013-01-03 00:02:11

标签: python csv

从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在所有列上添加引号。

1 个答案:

答案 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',
  '',
  '',
  '')]