python csv.reader_Python csv.reader与csv.dictreader的区别?

在处理CSV数据时,使用csv.reader脚本能正常解析20000多个项目,而当切换到csv.DictReader并处理相同数据(此数据包含标题行)时,脚本在解析过程中遇到错误。具体表现为在尝试将'TOTAL_ON_ORDER'字段转换为整数时抛出ValueError,因为该字段的值为'False',无法转换。问题在于csv.DictReader读取的数据中某个字段值不是预期的数字格式。
摘要由CSDN通过智能技术生成

有两个脚本,给出非常不同的结果。首先使用csv.reader,它运行良好,然后使用csv.dictreader,这给了我一些问题。两个脚本使用相同的数据集,两个文件之间的唯一区别是dictreader使用的一个文件有头。import csv

inv = csv.reader(open('inv.txt', 'rU'), dialect='excel', delimiter="\t")

for PART_CODE,MODEL_NUMBER,PRODUCT_NAME,COLOR,TOTAL_ONHAND,TOTAL_ON_ORDER,TOTAL_SALES,SALES_YEAR_TO_DATE,SALES_LASTYEAR_TO_DATE,\

TOTAL_NUMBER_OF_QTYsSOLD,TOTAL_PURCHASES,PURCHASES_YEAR_TO_DATE,PURCHASES_LASTYEAR_TO_DATE,TOTAL_NUMBER_OF_QTYpurchased,DATE_LAST_SOLD,DATE_FIRST_SOLD in inv:

if int(TOTAL_ON_ORDER) >= 1:

print ('%-20s %-100s OnHand: %-4s OnOrder: %-4s') % (MODEL_NUMBER,PRODUCT_NAME,TOTAL_ONHAND,TOTAL_ON_ORDER)

上面的工作很好,它将解析20000多个项目,没有错误。现在如果我选择像下面这样使用听写器,脚本将在一段时间后遇到问题。。。import csv

inv = csv.DictReader(open('ireport.txt', 'rU'), dialect='excel', delimiter="\t")

for row in inv:

if int(row['TOTAL_ON_ORDER']) >= 1:

print ('%-20s %-100s OnHand: %-4s OnOrder: %-4s') % (row['MODEL_NUMBER'],row['PRODUCT_NAME'],row['TOTAL_ONHAND'],row['TOTAL_ON_ORDER'])

打印大约100个,然后失败并报告此错误:if int(row['TOTAL_ON_ORDER']) >= 1:

ValueError: invalid literal for int() with base 10: 'False'

令我困惑的是,两个脚本都使用相同的数据(除了reader一个没有标题行,dictreader一个使用相同的数据),一个工作完美,另一个抱怨。有线索吗?

inv.txt的片段:61965901576 383964 Sandisk 128MB 3.3V Smartmedia Card 0 0 0 0 0 0 0 0 0 0 00/00/00 00/00/00

61965901521 348236 Sandisk 128MB Compactflash Card 0 0 54.26 0 0 1 0 0 0 0 01/09/02 01/09/02

61965902011 SDCZ2-1024-A10 Sandisk 1GB Cruzer Mini USB Flash Drive 0 0 0 0 0 0 0 0 0 0 00/00/00 00/00/00

61965901571 266796 Sandisk 256MB CompactFlash Disk 0 0 678.22 0 0 5 0 0 0 0 06/27/02 03/08/02

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值