Solución:
La fila del encabezado se “omite” como resultado de la llamada next()
. Así es como funcionan los iteradores.
Cuando recorre un iterador, es next()
se llama al método cada vez. Cada llamada avanza el iterador. Cuando el for
El ciclo comienza, el iterador ya está en la segunda fila y continúa desde allí.
Aquí está la documentación sobre el next()
método (aquí hay otra pieza).
Lo importante es que csv.reader
los objetos son iteradores, al igual que el objeto de archivo devuelto por open()
. Puede iterar sobre ellos, pero no contienen todas las líneas (o ninguna de las líneas) en un momento dado.
los csv.reader
el objeto es un iterador. Un iterador es un objeto con un next()
método que devolverá el siguiente valor disponible o aumentará StopIteration
si no hay ningún valor disponible. los csv.reader
devolverá valor línea por línea.
Los objetos iteradores son la forma en que Python implementa for
círculo. Al comienzo del bucle, el __iter__
se llamará al objeto del objeto en bucle. Debe devolver un iterador. Entonces el next
Se llamará al método de ese objeto y el valor se almacenará en la variable de bucle hasta que next
método aumenta StopIteration
excepción.
En su ejemplo, agregando una llamada a next antes de usar la variable en el for
construcción de bucle, está eliminando el primer valor del flujo de valores devueltos por el iterador.
Puede ver el mismo efecto con iteradores más simples:
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