有两个脚本可以提供截然不同的结果。首先使用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)
以上工作正常,它将解析20,000多个项目,没有错误。现在,如果我选择使用下面的dictreader,脚本会在一段时间后遇到问题......
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'
让我感到困惑,因为两个脚本都使用相同的数据(除了读者没有标题行而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
答案 0 :(得分:2)
它看起来像是在DictReader
函数中将某个东西作为布尔值读入一个整数(它不满意),而在reader
函数中它没有得到这样的转换。
试试这个:
import csv
inv = csv.DictReader(open('ireport.txt', 'rU'), dialect='excel', delimiter="\t")
for row in inv:
try:
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'])
except Exception as Err:
print row['TOTAL_ON_ORDER'],Err
break #if you want to end the function)
这将显示它正在窒息的行,如果你删除了它应该突破它。
祝你好运!