Цикл Python For, похоже, пропускается - PullRequest
0 голосов
/ 22 мая 2018

Это мой первый вопрос, поэтому, пожалуйста, будьте милы.Я прошу Python через онлайн-курс.Я выполнил это задание, используя Брелок, и он работал там.Я отправил код через систему онлайн-аттестации, и он тоже прошел там.Итак, мне уже дали «кредит» за это назначение.

Когда я пробую это в Idle или PyCharm, код не работает.Кажется, что он полностью пропускает цикл for.

Я посмотрел другие ответы на этот тип вопросов, но не могу понять, как применить их к моей ситуации.Пожалуйста, помогите мне понять, почему мой цикл for, похоже, пропускается.

fname = input("Enter file name: ")
fh = open(fname + ".txt")
x = fh.read()
count = 0
for line in fh:
    line = line.rstrip()
    word = line.split()
    if len(word) == 0:
        continue
    if word[0] != "From":
        continue
    else:
        print(word[1])
        count += 1
print("There were", count, "lines in the file with From as the first word")

В используемом файле .txt есть 27 адресов электронной почты, которые распечатываются один за другим, а в последней строке выдается общее количество.сосчитать.Как я уже сказал, он работает в Trinket и онлайн-кодировщике кода, но не в PyCharm или Idle.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Когда вы делаете x = fh.read(), вы читаете содержимое файла и сохраняете его в переменной x.

Из Документация Python :

Чтобы прочитать содержимое файла, вызовите f.read (размер), который читает некоторое количество данных и возвращает его в виде строки.размер является необязательным числовым аргументом.Если размер опущен или отрицателен, все содержимое файла будет прочитано и возвращено;это ваша проблема, если файл в два раза больше памяти вашей машины.В противном случае байты размером не более считываются и возвращаются.Если достигнут конец файла, f.read () вернет пустую строку ("").

Итак, когда файл полностью прочитан, fh уже находится наконец файла и повторение его с циклом for не приводит к появлению новых строк.У вас есть два варианта:

  1. Изменить for line in fh: с for line in x: ИЛИ
  2. Удалить x = fh.read()
0 голосов
/ 22 мая 2018

Вы можете попробовать заменить

for line in fh:

на

for line in x:

или удалить x = fh.read(), так как он прочитает весь файл и оставит пустой файл для цикла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...