2010-05-19 3 views
19

J'essaie de vérifier la valeur des données extraites par rapport à un csv que j'ai déjà. Il ne fera que boucler les lignes du CSV une seule fois, je ne peux vérifier qu'une valeur de feed.items(). Y a-t-il une valeur dont j'ai besoin pour réinitialiser quelque part? Existe-t-il un moyen meilleur/plus efficace de le faire? Merci.Lecture de CSV en Python à plusieurs reprises?

orig = csv.reader(open("googlel.csv", "rb"), delimiter = ';') 
goodrows = [] 
for feed in gotfeeds:  
    for link,comments in feed.items(): 
     for row in orig: 
      print link 
      if link in row[1]: 
       row.append(comments) 
       goodrows.append(row) 

Répondre

27

Vous pouvez « réinitialiser » l'itérateur CSV en remettant à zéro la position de lecture de l'objet fichier.

data = open("googlel.csv", "rb") 
orig = csv.reader(data, delimiter = ';') 
goodrows = [] 
for feed in gotfeeds:  
    for link,comments in feed.items(): 
     data.seek(0) 
     for row in orig: 
      print link 
      if link in row[1]: 
       row.append(comments) 
       goodrows.append(row) 
+0

Fonctionne très bien, merci. Mon dossier est petit pour un avenir proche, mais je détesterais avoir à chercher pourquoi il est lent dans quelques mois. – matt

7

Faire orig une liste évite la nécessité de réinitialiser/réanalyser le csv:

orig = list(csv.reader(open("googlel.csv", "rb"), delimiter = ';')) 
+4

Cela fonctionnera techniquement, mais entraînera le chargement du fichier CSV entier en mémoire. Pas un gros problème si le fichier est petit, mais cela ne va pas évoluer. – Cerin

+0

@Chris. Vrai. Si le fichier csv est énorme, je m'attendrais à ce qu'il le mentionne dans la question, mais il y a certainement de la place pour nos deux interprétations. – unutbu

+0

Je suis d'accord avec Chris S. Nous avons fait face au même problème .. finalement nos fichiers CSV ont atteint 5gb par morceau. Inutile de dire que c'était un cauchemar – dassouki

Questions connexes