为什么循环没有执行其他

时间:2015-04-09 18:38:15

标签: python csv

import csv
path1=r'/Users/Desktop/forks.csv'
path2=r'/Users/Desktop/forks1.csv'
outdata=[]
count=0
i=0
with open(path1,'rb') as input:
reader=csv.reader(input)
for row in reader:
    if i==0:
        i=i+1
        outdata.append(row)
        continue
    if int(row[5])>0:
        row.append(1)
        outdata.append(row)
        count=count+1
        print count
    else: 
        row.append(0)
        outdata.append(row)
        count=count+1
print count
with open (path2,'wb') as output:
  writer=csv.writer(output,delimiter=',')
  writer.writerows(outdata)

我有一个大表,我想为每一行添加一个带有布尔值的列。如果列6大于0,则应为1.如果为0,则应为零。 <循环停止

58542
58543
58544
58545
58546
58547
58548
Traceback (most recent call last):
File "/Users/Documents/workspace/datamining/opensource/label.py", line 18, in <module>
if int(row[5])>0:
ValueError: invalid literal for int() with base 10: ''

表中的信息如下,这意味着else循环没有执行。我在小表中测试,代码工作。我不知道为什么它不能在大型数据集中工作?


58547                1
58548                1
58549                0
58550                0

2 个答案:

答案 0 :(得分:0)

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

您将一个空值作为参数传递给intint显然无法将空值转换为整数。

答案 1 :(得分:0)

看起来第6列是空白的(空)而不是包含可以转换为整数的字符串。 else块未被执行,因为引发了异常。尝试:

if row[5] and int(row[5])>0:

在将其转换为row[5]之前检查空int。在此比较中,空字符串''的计算结果为False,因此应触发else块。