dav*_*ler 16 python csv python-2.x
我有以下代码是教程的一部分
import csv as csv
import numpy as np
csv_file_object = csv.reader(open("train.csv", 'rb'))
header = csv_file_object.next()
data = []
for row in csv_file_object:
data.append(row)
data = np.array(data)
Run Code Online (Sandbox Code Playgroud)
代码按预期工作,但我不清楚为什么调用.next()带变量的文件header工作.是不是csv_file_object仍然是整个文件?程序如何知道在for row in csv_file_object调用时跳过标题行,因为一旦定义变量标题就不会被引用?
该csv.reader对象是一个迭代器.迭代器是一个对象,其next()方法将返回下一个可用StopIteration值,如果没有可用值,则返回.该csv.reader会一行返回值线.
迭代器对象是python实现for循环的方式.在循环开始时,__iter__将调用循环对象的对象.它必须返回一个迭代器.然后,next将调用该对象的方法,并将值存储在循环变量中,直到该next方法引发StopIteration异常.
在您的示例中,通过在for循环构造中使用变量之前添加对next的调用,您将从迭代器返回的值流中删除第一个值.
您可以使用更简单的迭代器看到相同的效果:
iterator = [0, 1, 2, 3, 4, 5].__iter__()
value = iterator.next()
for v in iterator:
print v,
1 2 3 4 5
print value
0
Run Code Online (Sandbox Code Playgroud)