Поскольку lines
является списком, lines.count(word)
возвращает количество строк, которые в точности равны word
. Это 0
по двум причинам:
- Все строки, возвращаемые
readlines()
, заканчиваются новой строкой (кроме, возможно, последней строки). Поскольку word
не заканчивается символом новой строки, он никогда не будет точно соответствовать ни одному из них. - Даже если вы удалите символы новой строки, вы сравниваете одно слово со всей строкой. Таким образом, если файл не содержит по одному слову в строке с пробелом после слова, элементы
lines
никогда не будут точно соответствовать word
.
С другой стороны, поскольку line
является одна строка, line.count(word)
подсчитывает количество подстрок line
, соответствующих word
. for
l oop складывает количество подстрок во всех строках файла.
Обратите внимание, что если у вас есть строка, содержащая только "the "
, ваш код будет считать это слово дважды. Нет необходимости делать
times = lines.count(word)
перед l oop. Вам нужно просто инициализировать times = 0
.
Вы также можете использовать функцию sum()
:
times = sum(line.count(word) for line in lines)