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リストL列では、115.00それによって'115 .00 'です。csv.headerメソッドはすべての列に引用符を付けていると思います。

4

1 に答える 1

2

適切な列で float を使用することもできます。ただし、丸め誤差があるため、通常は float は通貨値には使用されません。Python には、このような専用のDecimal型があり、純粋な float よりも優れています。注目すべき点は次のとおりです。

... 10 進数を正確に表すことができます。対照的に、1.1 や 2.2 のような数値は、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 に答える