Использование re.findall в текстовом файле

Я хочу использовать re.findall для определения того, сколько раз слово отображается в файле .txt. Также мне это нужно, если я пытаюсь подсчитать, сколько раз слово Привет появляется в тексте Приветoo, чтобы быть обнаруженным.

Вот весь код, который у меня есть:

# -*- coding: utf-8 -*-
import re

total = 0

with open('text.txt') as f:
    for line in f:
        total = re.findall('Hello')

print total

Похоже, вы забыли задать вопрос в своем вопросе. Пожалуйста, красный Как спросить и предоставьте минимальный воспроизводимый пример.

timgeb 25.03.2018 15:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
4 782
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Создание файла:

echo "Hellooo there.
Hello hello Hello" > file.txt

И найдем все вхождения "Hello":

In [1]: import re

In [2]: with open('file.txt') as f:
   ...:     all_hellos = re.findall('Hello', f.read())
   ...:

In [3]: print(len(all_hellos))
3

Вышеупомянутое будет искать только Hello, но не hello. И это будет кэшировать весь файл в памяти, так что это будет нормально, если вы не используете большие файлы.

Помните, что re.findall() вернет список всех найденных вхождений, а не их количество.

Почему бы просто не использовать str.count, если вы не используете re.finditer для повышения эффективности памяти?

timgeb 25.03.2018 15:20

@timgeb str.count выглядит неплохо. Я никогда не знал об этом. Я не знал, хотел ли пользователь специально использовать re.findall.

Robert Seaman 25.03.2018 15:22
Ответ принят как подходящий

Зачем вообще использовать регулярное выражение?

Метод count() будет делать то же самое:

with open('text.txt') as f:

    total = f.read()
    print total.count('Hello')

И не требует импорта модулей, так как он встроен.

При использовании регулярного выражения также не рекомендуется использовать r в качестве префикса необработанной строки. total = re.findall(r'Hello')

Другие вопросы по теме