
В Python для подсчёта строк можно использовать встроенные инструменты стандартной библиотеки. Выбор метода зависит от формата данных: текст в переменной, список строк или содержимое файла. Каждый из подходов позволяет получить количество строк с минимальными затратами ресурсов.
Если строки хранятся в списке, используется len(): len(список). Это возвращает точное количество элементов, где каждый элемент – отдельная строка. В случае с многострочной строкой применяют splitlines(): len(текст.splitlines()). Этот метод учитывает все типы символов перевода строки, включая \n, \r\n и \r.
Для чтения из файла используют конструкцию with open(…) as f и функцию sum(1 for _ in f). Это позволяет посчитать строки построчно без загрузки всего содержимого в память. Такой подход особенно полезен при работе с большими файлами.
При необходимости отфильтровать пустые строки можно добавить условие: sum(1 for line in f if line.strip()). Это исключит строки, состоящие только из пробелов или символов переноса.
Подсчёт количества строк в списке строк

Если данные представлены в виде списка строк, для подсчёта используется функция len(). Она возвращает количество элементов в списке, каждый из которых считается строкой независимо от содержимого.
Пример:
строки = ["первая", "вторая", "третья"]
количество = len(строки)
print(количество) # 3
Если требуется игнорировать пустые строки, применяют фильтрацию:
строки = ["первая", "", "третья", " "]
непустые = [строка for строка in строки if строка.strip()]
print(len(непустые)) # 2
Для подсчёта только строк, содержащих определённый паттерн, применяют условие внутри генератора:
строки = ["ошибка: файл не найден", "успешно", "ошибка: нет доступа"]
ошибки = [строка for строка in строки if "ошибка" in строка]
print(len(ошибки)) # 2
Получение количества строк в многострочной строке

Чтобы определить число строк в многострочной строке, используйте метод splitlines(). Он корректно разбивает текст по разделителям строк и возвращает список:
text = """Первая строка
Вторая строка
Третья строка"""
количество = len(text.splitlines())
print(количество) # 3
splitlines() обрабатывает разные типы переносов – \n, \r\n, \r. Это особенно важно при работе с данными из разных операционных систем.
Если требуется учитывать даже пустые строки, важно не использовать split(‘\n’) без последующей фильтрации, так как он не удаляет символы переноса и может дать неверный результат при наличии завершающего переноса:
text = "строка 1\nстрока 2\n"
количество = len([стр for стр in text.split('\n') if стр != ''])
print(количество) # 2
Для подсчёта всех строк, включая пустые, просто примените splitlines() без фильтрации:
text = "a\n\nb"
print(len(text.splitlines())) # 3
Если строка поступает как один блок из файла или ввода, рекомендуется использовать splitlines() вместо ручной обработки по ‘\n’ – это сокращает вероятность ошибок.
Фильтрация пустых строк перед подсчётом

Чтобы исключить пустые строки при подсчёте, важно корректно определить, что считать пустой строкой. В большинстве случаев это строки, состоящие только из пробельных символов или полностью пустые.
- Для удаления таких строк используйте метод
strip()в комбинации с фильтрацией:
lines = text.split('\n')
non_empty_lines = [line for line in lines if line.strip()]
count = len(non_empty_lines)
strip()удаляет пробелы, табуляции и символы перевода строки с начала и конца строки.- Выражение
if line.strip()возвращаетFalseдля пустых или содержащих только пробелы строк.
Если обрабатываются строки из файла, используйте генераторные выражения для оптимизации памяти:
with open('input.txt', encoding='utf-8') as f:
count = sum(1 for line in f if line.strip())
- Такой подход исключает создание промежуточных списков.
- Фильтрация происходит на этапе чтения, что ускоряет обработку больших файлов.
Избегайте использования len([..]) без необходимости – в подобных задачах sum() с генератором предпочтительнее.
Подсчёт строк в текстовом файле
Чтобы узнать количество строк в текстовом файле, можно использовать встроенные средства Python без дополнительных библиотек. Пример с использованием контекстного менеджера:
with open('example.txt', 'r', encoding='utf-8') as f:
line_count = sum(1 for _ in f)
print(line_count)
Этот способ не загружает весь файл в память и подходит для работы с большими файлами.
Если необходимо предварительно проверить существование файла и обработать возможные ошибки:
import os
file_path = 'example.txt'
if os.path.isfile(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
count = sum(1 for _ in f)
print(count)
else:
print('Файл не найден')
Альтернативный вариант с обработкой исключений:
try:
with open('example.txt', 'r', encoding='utf-8') as f:
count = sum(1 for _ in f)
print(count)
except FileNotFoundError:
print('Файл отсутствует')
except UnicodeDecodeError:
print('Ошибка кодировки')
Если важна скорость обработки, стоит отключить автоматическое определение конца строки:
with open('example.txt', 'r', encoding='utf-8', newline='') as f:
count = sum(1 for _ in f)
print(count)
- Формат открытия: только режим чтения (
'r') - Кодировка: указывать явно, особенно при работе с кириллицей
- Не использовать
readlines()– он загружает всё в память
Использование генераторов для подсчёта строк

Генераторы позволяют обрабатывать большие объёмы данных без загрузки всего содержимого в память. Это особенно полезно при работе с файлами, где важно контролировать ресурсы.
Чтобы посчитать количество строк в файле с использованием генератора, применяют ленивую итерацию:
with open('example.txt', 'r', encoding='utf-8') as f:
count = sum(1 for _ in f)
Оператор sum(1 for _ in f) запускает генераторное выражение, проходя по каждой строке файла один раз. Это исключает необходимость хранения строк в памяти, в отличие от readlines().
Если требуется посчитать только строки, удовлетворяющие определённому условию, генератор остаётся применим:
with open('example.txt', 'r', encoding='utf-8') as f:
count = sum(1 for line in f if line.strip())
Здесь учитываются только непустые строки. strip() удаляет пробельные символы, включая перенос строки. Такой подход позволяет избежать лишних проверок и упрощает фильтрацию.
При работе с потоками данных, например sys.stdin, генераторы позволяют сразу обрабатывать ввод построчно:
import sys
count = sum(1 for _ in sys.stdin)
Такой способ не требует предварительного чтения потока и подходит для пайпов и перенаправлений в командной строке.
Генераторные выражения удобны для встраивания в более сложные конструкции, включая списковые включения и функции-обёртки. Это снижает накладные расходы и упрощает чтение кода.
Учет символов перевода строки при разбиении текста
При разбиении строки в Python важно учитывать символы перевода строки, такие как \n. Эти символы могут влиять на результат, особенно если задача требует точного разделения текста на строки или обработку многократных переводов строки в одном тексте.
Если в строке присутствуют символы перевода строки, метод split() будет учитывать их как границы для новых элементов. Например, при вызове text.split('\n'), текст будет разделен на части, где каждая строка текста будет представлять собой отдельный элемент списка. Однако символ \n не будет включен в элементы этого списка.
Для учета символов перевода строки в процессе разбиения и получения их в результатах можно использовать метод re.split() из модуля re. Он позволяет точно контролировать, как будет работать разделитель, включая символы новой строки в итоговый список. Пример:
import re
text = "Первая строка\nВторая строка\nТретья строка"
result = re.split(r'(\n)', text)
print(result)
Этот код разделяет текст по символу перевода строки, включая сам \n в результат. Обратите внимание, что в случае использования регулярных выражений, символы перевода строки становятся частью результата.
Когда работа с текстом включает многострочные данные, важно учитывать не только сам факт перевода строки, но и его контекст. Например, в данных, полученных из файлов, где перевод строки может быть разным в зависимости от операционной системы (\n для Linux, \r\n для Windows), следует заранее нормализовать эти символы, чтобы избежать ошибок в обработке текста.
Если необходимо удалить символы перевода строки, метод strip() поможет избавиться от них в начале и в конце строки. Пример:
text = "Текст с переносом\n"
cleaned_text = text.strip()
print(cleaned_text)
Однако для удаления всех символов перевода строки из текста можно использовать метод replace(), заменяя их на пустые строки:
text = "Первая строка\nВторая строка\n"
text_without_newlines = text.replace('\n', '')
print(text_without_newlines)
Таким образом, важно четко понимать, как символы перевода строки могут влиять на разбиение текста и соответствующим образом выбирать методы обработки в зависимости от целей задачи.
Подсчёт строк, удовлетворяющих условию

Для подсчёта строк, которые соответствуют определённому условию, можно использовать цикл for или функцию filter(). В обоих случаях важно правильно сформулировать условие, чтобы результат был точным.
Пример с использованием цикла for:
count = 0
for line in lines:
if "условие" in line:
count += 1
Здесь переменная count увеличивается на 1 каждый раз, когда строка удовлетворяет условию, например, содержит определённую подстроку.
Вместо цикла можно использовать filter(), который позволяет фильтровать строки, подходящие под заданное условие, и подсчитать их количество с помощью функции len():
count = len(list(filter(lambda line: "условие" in line, lines)))
Функция filter() создаёт итератор, который фильтрует строки, удовлетворяющие условию. Функция len() затем считает количество таких строк.
Если условие более сложное, например, проверка на несколько признаков, можно комбинировать условия с помощью логических операторов:
count = len(list(filter(lambda line: "условие1" in line and "условие2" not in line, lines)))
Такие методы позволяют гибко и эффективно подсчитывать строки, удовлетворяющие заданным критериям.
