Essayer de comprendre python csv .next ()
J'ai le code suivant qui fait partie d'un tutoriel
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)
le code fonctionne comme il est censé, mais il n'est pas clair pour moi pourquoi appeler .next()
sur le fichier avec la variable header
œuvres. N'est-ce pas csv_file_object encore l'ensemble du fichier? Comment fonctionne le programme de sais pour sauter la ligne d'en-tête lors de la for row in csv_file_object
est appelé, car il ne semble pas la variable d'en-tête est toujours référencé une fois défini?
source d'informationauteur davidheller | 2013-01-27
Vous devez vous connecter pour publier un commentaire.
La ligne d'en-tête est "sauté" suite à l'appel de
next()
. C'est la façon dont les itérateurs de travail.Lorsque vous passez en boucle sur un itérateur, son
next()
méthode est appelée à chaque fois. À chaque appel, les progrès de l'itérateur. Lorsque lefor
boucle commence, l'itérateur est déjà à la deuxième rangée, et il va à partir de là.Voici la documentation sur le
next()
méthode (voici un autre morceau).Ce qui est important, c'est que
csv.reader
les objets sont des itérateurs, tout comme fichier de l'objet renvoyé paropen()
. Vous pouvez effectuer une itération sur eux, mais ils ne contiennent pas toutes les lignes (ou les lignes) à un instant donné.La
csv.reader
objet est un itérateur. Un itérateur est un objet avec unenext()
méthode qui retourne la valeur suivante disponibles ou augmenterStopIteration
si aucune valeur n'est disponible. Lecsv.reader
retourne la valeur de la ligne par ligne.Les itérateurs sont les objets de la façon python met en œuvre
for
boucle. Au début de la boucle, le__iter__
objet de la boucle sur l'objet sera appelée. Il doit retourner un itérateur. Ensuite, lenext
méthode de cet objet sera appelée et de la valeur stockée dans la variable de boucle jusqu'à ce que lenext
méthode soulèveStopIteration
exception.Dans votre exemple, par l'ajout d'un appel au suivant avant d'utiliser la variable dans le
for
boucle de la construction, vous êtes en train de supprimer la première valeur à partir du flux de valeurs renvoyées par l'itérateur.Vous pouvez voir le même effet avec de plus simple, les itérateurs:
csv.reader est un itérateur. Il lit une ligne du csv chaque fois que .suivant est appelé. Voici la documentation: http://docs.python.org/2/library/csv.html. Un itérateur objet peut effectivement renvoyer des valeurs à partir d'une source qui est trop grand pour lire tous à la fois. à l'aide d'une boucle for avec un itérateur efficacement les appels .suivant sur chaque passage dans la boucle.
Le csv.reader est un itérateur. De l'appelant .next() obtient la valeur suivante comme il parcourt le fichier.
Dans le code ci-dessous pour la boucle de l'appelant .next() sur l'itérateur à chaque fois et la distribution de la suite à côté de la ligne de variable.
Le comportement de next() est plus que cela, tous les exposer ci-dessus est ok mais il y a une chose qui manque, également à l'aide de prochain vous raconter l'itérateur de la ligne où vous souhaitez commencer l'itération est donc un problème disons que je veux une valeur qui est dans la ligne 3 sans passant par toutes les lignes que je peux facilement utiliser ensuite, j'ai eu la valeur, mais si j'ai besoin d'itérer sur la première ligne dans mon cas, je ne peux pas parce que peu importe ce que l'itérateur encore commençant à la ligne 3 donc je ne peux pas commencer à partir de la ligne 1, il y a bien un moyen, mais je n'ai pas trouver encore.