Python l oop поверх открытого файла - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь подсчитать, сколько раз (примерно) слово «The» появляется в тексте.

book1 = 'imitation_of_christ.txt'
book2 = 'jesus_of_history.txt'

with open(book1, encoding='utf-8') as book1:
    lines = book1.readlines()
    word = 'the '
    times = lines.count(word)

    for line in lines:
        times += line.count(word)


    print (f"The word '{word}'' appears roughly {times} times in {book1}.")

Я написал код, но не понимаю, зачем мне переменная 'times', чтобы это работало? Я попытался удалить его, но выходит 0 раз.

Есть ли более эффективный способ сделать то, что я делаю?

Спасибо

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Поскольку lines является списком, lines.count(word) возвращает количество строк, которые в точности равны word. Это 0 по двум причинам:

  1. Все строки, возвращаемые readlines(), заканчиваются новой строкой (кроме, возможно, последней строки). Поскольку word не заканчивается символом новой строки, он никогда не будет точно соответствовать ни одному из них.
  2. Даже если вы удалите символы новой строки, вы сравниваете одно слово со всей строкой. Таким образом, если файл не содержит по одному слову в строке с пробелом после слова, элементы 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)
1 голос
/ 05 августа 2020

Вот действительно простой способ просто прочитать весь файл и подсчитать количество вхождений:

book1 = 'imitation_of_christ.txt'
book2 = 'jesus_of_history.txt'

with open(book1, encoding='utf-8') as book1:
    book = book1.read()
    word = 'the '
    times = book.count(word)

    print (f"The word '{word}'' appears roughly {times} times in {book1}.")
...