Как выполняется подсчет строк в Python
Основной эффективный способ: итерация по файлу
Как посчитать строки в файле без загрузки всего файла в память?
Самый производительный и безопасный для больших файлов способ – использовать генераторное выражение sum(1 for line in file). Он не хранит строки в оперативной памяти, а лишь подсчитывает их.
with open('data.txt', 'r') as f:
count = sum(1 for _ in f)
print(f'Строк в файле: {count}')посчитать количество символов python (посчитать количество символов в python)
Строк в файле: 42
как посчитать символы в строке python (как посчитать символы в строке python)
- Файл может содержать пустые строки – они тоже считаются.
- Разные окончания строк (CR, LF, CRLF). Python автоматически обрабатывает их в текстовом режиме.
- Отсутствие файла или ошибка доступа – используйте блок try/except.
Альтернативные варианты подсчета строк
Как посчитать строки в файле с помощью readlines()?
Метод readlines() загружает все строки в список, поэтому подходит только для небольших файлов.
with open('file.txt') as f:
lines = f.readlines()
count = len(lines)
print(count)посчитать строки python (посчитать строки в python)
Как посчитать строки в текстовой строке (переменной)?
Если текст уже загружен в переменную, удобно использовать str.count('\n') или splitlines().
text = "строка1\nстрока2\nстрока3\n"
# метод 1
count1 = text.count('\n')
# метод 2 (учитывает разные окончания)
count2 = len(text.splitlines())
print(count1, count2)3 3
Как посчитать строки в списке строк?
Если у вас есть список строк (например, результат чтения), количество строк равно длине списка.
lines = ["первая", "вторая", "третья"]
count = len(lines)
print(count)3
Как посчитать непустые строки?
Исключить пустые строки можно фильтрацией.
with open('data.txt') as f:
non_empty = sum(1 for line in f if line.strip())
print(non_empty)Как использовать системную утилиту wc из Python?
Для Unix-подобных систем можно вызвать команду wc -l через модуль subprocess.
import subprocess
result = subprocess.run(['wc', '-l', 'file.txt'], capture_output=True, text=True)
count = int(result.stdout.split()[0])
print(count)Расширенные примеры подсчета строк
Подсчет строк в многогигабайтном файле с прогрессом
Для очень больших файлов полезно показывать прогресс, например, с помощью tqdm или простого счетчика.
import os
filename = 'huge_file.txt'
file_size = os.path.getsize(filename)
with open(filename, 'r') as f:
count = 0
for _ in f:
count += 1
# каждые 100 000 строк выводим прогресс
if count % 100000 == 0:
print(f'Обработано {count} строк')
print(f'Итого: {count} строк')Подсчет строк с учетом разных окончаний (\r, \n, \r\n) в бинарном режиме
Иногда файл может иметь смешанные переводы строк. В текстовом режиме Python их нормализует. Если нужно считать именно физические строки (по символам перевода), читайте в бинарном режиме.
def count_lines_binary(filename):
with open(filename, 'rb') as f:
data = f.read()
# считаем все возможные концы строк
return data.count(b'\n') + data.count(b'\r') - data.count(b'\r\n') # не совсем точный, проще splitlines
# или через splitlines:
# return len(data.splitlines())
print(count_lines_binary('mixed.txt'))Подсчет строк с одновременной их обработкой (например, фильтрация)
Иногда нужно посчитать строки, удовлетворяющие условию, при этом не читая файл дважды.
import re
count_error = 0
count_total = 0
with open('log.txt') as f:
for line in f:
count_total += 1
if 'ERROR' in line:
count_error += 1
# здесь может быть другая обработка
print(f'Всего строк: {count_total}, ошибок: {count_error}')Подсчет строк с помощью модуля mmap (для очень больших файлов с малым временем доступа)
mmap отображает файл в память, позволяя эффективно искать символы перевода строки.
import mmap
def count_lines_mmap(filename):
with open(filename, 'rb') as f:
with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm:
count = 0
pos = mm.find(b'\n')
while pos != -1:
count += 1
pos = mm.find(b'\n', pos + 1)
return count
print(count_lines_mmap('data.txt'))Подсчет строк в тексте, разделенном произвольным разделителем (не только \n)
Иногда нужно считать строки, разделенные другим символом, например, запятой или точкой с запятой.
text = "слово1;слово2;слово3;"
separator = ';'
count = text.count(separator)
# или если последний разделитель необязателен:
count = len(text.split(separator)) - 1 if text.endswith(separator) else len(text.split(separator))
print(count)3
Подсчет строк с использованием Path.read_text().splitlines() (Python 3.4+)
Короткий однострочник для небольших файлов.
from pathlib import Path
count = len(Path('file.txt').read_text().splitlines())
print(count)