for循环没有在python中运行

时间:2013-04-10 14:06:56

标签: python file-io for-loop

我正在编写一个从NumPy数组(train_data)读取数据的程序,并使用scikit-learn RandomForestClassifier来预测另一个文件中列的结果(测试)。我的所有代码都工作正常,除了我的代码末尾的for循环,它表示从测试文件中获取行并将它们写入外部文件(打开),其中包含0或1的附加列[0]取决于数据不会运行。任何线索为什么?这是相关代码

"""------------------Setting up the files-----------------------"""
testing = csv.reader(open('file_name', 'rb'))
header = testing.next()
opening = csv.writer(open('new_file_name', 'wb'))
"""------------------Setting up the files-----------------------"""


"""----------training and predicting--------------------"""
from sklearn.ensemble import RandomForestClassifier
Forest = RandomForestClassifier(n_estimators = 100)
Forest = Forest.fit(train_data[0::,1::],train_data[0::,0])
Output = Forest.predict(test_data) 
"""----------training and predicting--------------------"""


"""------Writing new file-------------"""
final_count = 0
for row in testing:
    row.insert(0,Output[final_count])
    opening.writerow(row)
    final_count += 1
"""------Writing new file-------------"""

我知道这是一个事实,它是for循环因为我添加了一个额外的东西,如果final_count小于5并且它从未打印,将打印“Hello World”。这不是缩进错误,因为那会出现,所以任何人都知道会发生什么?

1 个答案:

答案 0 :(得分:1)

根据上述评论,发现OP正在使用testing的迭代来填充NumPy数组。这个迭代会在文件中向前推进csv迭代器,一旦它到达结尾,语法for row in testing:将不再做任何事情(也就是说,迭代器已经到了文件的末尾并且所以没有更多的行要迭代了。)

一个修复方法是首先遍历程序开头的所有testing行,并将所有数据保存到列表或其他内容中。甚至将csv.readerlist()包裹起来也可行(我对csv.reader与常规生成器/迭代器不太熟悉。)

另一个解决方法是在最后一个循环之前再次实例化testing对象,再次重新创建csv.reader