for循环未在python中运行

for循环未在python中运行,python,file-io,for-loop,Python,File Io,For Loop,我正在编写一个程序,从一个NumPy数组(train_data)读取数据,并使用scikit learn RandomForestClassifier预测另一个文件中某列的结果(测试)。除了代码末尾的for循环外,我的所有代码都可以正常工作,该循环表示从测试文件中获取行,并将它们写入外部文件(打开)中,其中包含一个额外的列[0],其中包含0或1,具体取决于数据是否运行。有什么线索说明原因吗?这是相关代码 """------------------Setting up the files-----

我正在编写一个程序,从一个NumPy数组(train_data)读取数据,并使用scikit learn RandomForestClassifier预测另一个文件中某列的结果(测试)。除了代码末尾的for循环外,我的所有代码都可以正常工作,该循环表示从测试文件中获取行,并将它们写入外部文件(打开)中,其中包含一个额外的列[0],其中包含0或1,具体取决于数据是否运行。有什么线索说明原因吗?这是相关代码

"""------------------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”,而它从未打印过。这不是缩进错误,因为会出现缩进错误,所以任何人都知道会发生什么?

根据上面的评论,OP使用迭代通过
测试来填充NumPy数组。此迭代将使
csv
迭代器在文件中向前推进,一旦到达末尾,测试中的行的语法
将不再执行任何操作(也就是说,迭代器已到达文件末尾,因此没有更多的行可迭代)

一种修复方法是首先在程序开始时遍历
测试的所有行,并将所有数据保存到列表或其他地方。甚至可以用
list()
包装
csv.reader
也可以(我不太熟悉
csv.reader
和常规生成器/迭代器)


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

您能简化程序,在不使用scikit learn的情况下再现错误吗?如果没有如此严重的依赖关系,您可能会得到更好的答案,这可能与错误根本无关。另外,在写入文件之前,您是否尝试过打印
输出
?是否在某处记录了未捕获的异常?@larsmans我尝试过运行输出,效果很好!是的,如果我不需要scikit学习,它仍然不起作用。虽然它没有调用错误,但它只是不会运行for loopWhat is
len(Output)
?418…与test_数据数组的长度相同,该数组来自测试。该文件已完成,因为我在NumPy数组(test_数据)中使用它,以便使其与RandomForestClassifier一起工作。所以这是一个没有意义的问题