2010-11-16 5 views

Répondre

4

C'est parce que je suis stupide et ne peut pas lire:

Sans un second argument, o doit être un objet de collection qui prend en charge le protocole d'itération (la méthode iter()), ou doit prendre en charge le protocole de séquence (la méthode getitem() avec des arguments entiers commençant à 0). S'il ne prend pas en charge l'un de ces protocoles, TypeError est déclenché.

La solution consiste à fournir une chaîne vide sentinelle.

with open("mydata.txt") as fp: 
    for line in iter(fp.readline, ''): 
     print line 
+1

+1: Je n'aurais pas utilisé le mot * stupide *, cependant. :) BTW, si vous résolvez votre propre problème, il est toujours encouragé à accepter la bonne réponse (la vôtre), en utilisant la coche sur la gauche. –

+0

Qui a downvoted cela? S'il vous plaît, expliquez. –

+0

Space_C0wb0y, j'ai essayé: "Vous pouvez accepter votre propre réponse dans 2 jours". –

-2

La seule chose à laquelle je peux penser est que vous n'avez pas de fichier appelé mydata.txt ou qu'il est au mauvais endroit.

+0

Il est évidemment déjà réussi à ouvrir le fichier - l'erreur est sur la ligne 2, pas la ligne 1, et dit ce n'est pas itératives, pas que ce n'est pas ouvert . –

2

objets Python file sont itératives, donc il n'y a pas besoin d'appeler explicitement iter(). Pour lire un fichier ligne par ligne, vous pouvez simplement écrire:

with open("mydata.txt") as fp: 
    for line in fp: 
     print line 
+0

Ce n'est pas la solution au problème de l'OP. –

+0

Space_C0wb0y, bien que ce ne soit pas la solution pour ma question actuelle, mais à partir de maintenant, je n'utiliserai probablement jamais la combinaison iter + readline grâce à Tendayi :) –

Questions connexes