
Работа с текстовыми файлами в Python часто требует анализа содержимого: от поиска ключевых терминов до подсчёта статистики. Важно уметь точно определить, сколько раз определённое слово встречается в документе, будь то лог-файл, выгрузка данных или пользовательский текст.
Для решения задачи можно использовать разные подходы: метод count() для строк, регулярные выражения через модуль re, либо построчную обработку с подсчётом вхождений. Каждый метод имеет особенности: count() быстрее, но не учитывает сложные шаблоны, а регулярные выражения позволяют искать слова в разных формах и с учётом регистра.
Точный выбор подхода зависит от структуры текста и требований к результату. Например, при анализе логов критично различать регистр символов, а при работе с естественным языком удобнее использовать регулярные выражения для поиска словоформ. В статье будут рассмотрены практические варианты подсчёта с примерами кода на Python.
Чтение текстового файла построчно для поиска слов

Построчная обработка позволяет экономить память, так как в оперативную память загружается только текущая строка. Для работы используют конструкцию with open("файл.txt", "r", encoding="utf-8") as f:, которая автоматически закрывает файл после завершения.
Каждая строка перебирается в цикле for line in f:. Перед анализом стоит удалить лишние пробелы и символы перевода строки с помощью line.strip(). Если требуется учитывать регистр, используйте строку напрямую, иначе приводите её к нижнему регистру методом .lower().
Для подсчёта количества вхождений слова в строке применяют line.count("слово"). Чтобы искать отдельные слова, а не подстроки, строку разбивают методом .split() и проверяют каждое значение через условие if token == "слово":. Суммирование результатов по каждой строке формирует итоговое количество.
При больших файлах такой подход предпочтительнее, чем чтение всего содержимого разом, поскольку снижает нагрузку на память и ускоряет обработку.
Использование метода count() для подсчёта вхождений

Метод count() позволяет получить количество повторений подстроки в строке без дополнительного кода. Для работы с текстовым файлом сначала читают его содержимое:
with open("text.txt", "r", encoding="utf-8") as f:
data = f.read()
count = data.count("Python")
print(count)
count() учитывает регистр, поэтому "Python" и "python" будут распознаны как разные слова. Чтобы подсчёт не зависел от регистра, используйте метод lower():
count = data.lower().count("python")
При подсчёте отдельных слов важно убедиться, что поиск не захватывает части других слов. Для этого стоит добавить пробелы или использовать разделители, например:
count = data.count(" Python ")
Метод count() работает быстро и подходит для поиска фиксированных строк. Если требуется анализировать большие массивы текста или учитывать границы слов, рекомендуется комбинировать его с регулярными выражениями.
Подсчёт с помощью цикла и условных проверок
Для подсчёта встречаемости слова можно построчно проходить файл и анализировать каждую строку. Такой подход удобен при работе с большими объёмами данных, так как не требует загрузки всего текста в память.
Пример кода:
count = 0
target = "python"
with open("text.txt", "r", encoding="utf-8") as f:
for line in f:
words = line.split()
for w in words:
if w.strip(".,!?;:").lower() == target:
count += 1
print("Количество вхождений:", count)
В примере каждая строка разбивается методом split(), что позволяет выделить отдельные слова. Для точного совпадения удаляются знаки пунктуации с помощью strip(), а lower() обеспечивает нечувствительность к регистру.
При необходимости можно расширить условие, например, учитывать окончания слов или проверять вхождение подстроки через оператор in. Такой метод даёт полный контроль над логикой поиска и подходит для текстов со сложной структурой.
Регистрозависимый и регистронезависимый поиск

При подсчёте количества вхождений слова в файле важно учитывать, должна ли совпадать форма написания символов. Например, строка "Python" и "python" будут интерпретированы по-разному в регистрозависимом режиме.
- Регистрозависимый поиск: используется оператор
str.count()или перебор с условием точного совпадения. В этом случае"Python"и"python"считаются разными словами. - Регистронезависимый поиск: текст и искомое слово приводятся к одному регистру, чаще всего нижнему, с помощью
.lower()или.casefold(). Последний вариант предпочтителен для корректной работы с юникодом (например, символы немецкого ß или турецкие буквы).
Практические рекомендации:
- Если требуется точная статистика по конкретной форме слова, используйте регистрозависимый поиск.
- Для анализа естественного текста (например, слов в статье или логах) всегда приводите строки к
.casefold(), чтобы избежать пропуска вхождений из-за регистра. - При больших объёмах данных избегайте лишних преобразований внутри цикла – преобразуйте текст целиком один раз и только потом выполняйте поиск.
Применение регулярных выражений для нахождения слова

Регулярные выражения позволяют контролировать границы слова и учитывать разные варианты написания. В Python используется модуль re, где функция re.findall() возвращает список всех совпадений.
Чтобы искать именно слово, а не его часть, применяются границы \b. Пример:
import re
with open("text.txt", "r", encoding="utf-8") as f:
data = f.read()
pattern = r"\bслово\b"
matches = re.findall(pattern, data, flags=re.IGNORECASE)
print(len(matches))
Флаг IGNORECASE обеспечивает поиск без учета регистра. Для ускорения обработки больших файлов можно использовать re.finditer(), так как он возвращает итератор, а не весь список.
Сравнение подходов:
| Метод | Особенности |
|---|---|
re.findall() |
Возвращает список всех совпадений, удобен для подсчета через len(). |
re.finditer() |
Экономит память, так как перебирает совпадения по одному. |
re.search() |
Находит только первое совпадение, полезно для проверки наличия. |
При необходимости учитывать разные формы слова можно использовать группы и квантификаторы, например: r"\bслов(о|а|у|ом)\b".
Подсчёт всех слов файла с помощью collections.Counter

Для точного подсчёта всех слов в файле Python удобно использовать модуль collections и класс Counter. Он автоматически собирает частоту появления каждого слова, избавляя от необходимости вручную создавать словари и проверять наличие ключей.
Сначала файл открывается в режиме чтения с явным указанием кодировки: open('file.txt', encoding='utf-8'). Затем содержимое считывается и разделяется на слова с помощью метода split(). Чтобы подсчёт был корректным, рекомендуется приводить слова к нижнему регистру и удалять пунктуацию через модуль string:
import string
from collections import Counter
with open('file.txt', encoding='utf-8') as f:
text = f.read().lower()
text = text.translate(str.maketrans('', '', string.punctuation))
words = text.split()
word_count = Counter(words)
print(word_count)
Результат Counter представляет собой словарь, где ключ – слово, а значение – количество его вхождений. Для получения топ-N самых частых слов удобно использовать метод most_common(n). Например, word_count.most_common(10) выведет десять наиболее употребляемых слов с точным числом повторений.
Если необходимо фильтровать слова по длине или исключать стоп-слова, достаточно добавить генератор списка перед передачей данных в Counter:
filtered_words = [w for w in words if len(w) > 2 and w not in stop_words]
word_count = Counter(filtered_words)
Подход с Counter оптимален для больших файлов: он эффективно использует память и поддерживает все стандартные операции по объединению и обновлению словарей частот, что упрощает последующий анализ текста.
