2014-09-03 2 views
-1

У меня есть файл с именем file с этим текстом:Readline() в цикле не работает в Python

Hello 
I am not a bot 
I am a human 
Do you believe me? 
I know you won't 
Yes I am a bot 
Yes you thought it right 

Этот код выводит все строки текста:

with open(file) as f: 
    for i in f: 
     print(i,end="") 

Но этого кода нет, и я не понимаю, почему.

with open(file) as f: 
    for i in f: 
     print(f.readline(),end="") 

Это печатает:

I am not a bot 
Do you believe me? 
Yes I am a bot 

То, что я понимаю, как цикл проходит по строкам в файле, он будет читать эту строку и вернуть, что в виде строки, которая затем распечатать. Если я заменил цикл for for i in range(9), он работает.

+2

Почему вы смешивания итерация * над файлом * и вызовы readline? Итерация * уже считывает строки *. –

+0

Да, но зачем ставить readline() там не работает? –

+2

Это действительно работает. Вы можете видеть, что он читает три строки в вашем файле, как вы это просили. (тот факт, что он не читает строки, уже потребляемые 'i', не является ошибкой' readline') – Kevin

ответ

4

для цикла по файловому объекту вызывает неявно readline (или эквивалент) так, что СЛУЧИЛОСЬ является то, что в каждом цикле вы звоните readline дважды, и именно поэтому вы получаете каждую вторую линию

Смежные вопросы