2010-11-16 14 views

Odpowiedz

4

To dlatego, że jestem głupi i nie można odczytać:

bez drugiego argumentu, o musi być obiektem kolekcja, która obsługuje protokół iteracji (metoda iter()), lub musi obsługiwać protokół sekwencji (metoda getitem() z liczbami całkowitymi zaczynającymi się od 0). Jeśli nie obsługuje żadnego z tych protokołów, podnosi się TypeError.

Rozwiązaniem jest zapewnienie pustego wartownika znaków.

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

+1: Nie użyłbym jednak słowa * głupi *. :) BTW, jeśli rozwiążesz swój problem, nadal jest zachęcany do przyjęcia poprawnej odpowiedzi (własnej), za pomocą kleszczy po lewej stronie. –

+0

Kto to zajął? Proszę wytłumacz. –

+0

Space_C0wb0y, próbowałem: "Możesz przyjąć własną odpowiedź w ciągu 2 dni". –

-2

Jedyne o czym mogę myśleć to to, że nie masz pliku o nazwie mydata.txt lub jest on w niewłaściwym miejscu.

+0

To oczywiście już udało się otworzyć pliku - Błąd znajduje się na linii 2, a nie linii 1, i mówi, że to nie iterable, a nie, że nie jest otwarty . –

2

Python file obiekty są iterable, stąd nie ma potrzeby jawnie wywołać iter(). Aby odczytać pliku linia po linii można po prostu napisać:

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

To nie jest rozwiązanie problemu OP. –

+0

Space_C0wb0y, choć nie jest to rozwiązanie dla mojego aktualnego pytania, ale od teraz prawdopodobnie nigdy nie użyję kombinacji iter + readline dzięki Tendayi :) –

Powiązane problemy