1

从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 ListL列中,其115.00值为'115 .00 '. 我认为该方法是csv.header在所有列上加上引号。

4

1 回答 1

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',
  '',
  '',
  '')]
于 2013-01-03T00:10:40.327 回答