Различное поведение при использовании вывода open () и сохранение в переменную - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть список строк в Python, и я хочу найти, какие из них не содержат плохих подстрок, которые я читаю из файла. Вот мой код в Python 2:

with open("badchars.txt", "w") as f:
  f.write("a b c")

mywords = ["good", "bad"]

print [
       word for word in mywords
          if all(
                 badchar not in word
                    for badchar in open("badchars.txt").read().split()
                )
      ]

with open("badchars.txt") as f:
  print [
         word for word in mywords
            if all(
                   badchar not in word
                      for badchar in f.read().split()
                  )
        ]

Я ожидаю, что обе строки напечатают ["good"], но хотя первая ведет себя так, как ожидалось, вторая выдает ["good", "bad"]. Я не понимаю почему.

То же самое происходит в питоне 3, если я изменю print на print().

Почему это происходит?

1 Ответ

0 голосов
/ 26 апреля 2018

f.read() начинается с текущего местоположения в файле. Таким образом, когда вы вызываете его дважды для одного и того же файлового объекта, во второй раз больше нечего читать.

...