Как выполняется подсчет строк в Python

Раздел: 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)
Ошибка: Строка, содержащая только пробелы, после strip() станет пустой и не будет учтена. Если нужно считать такие строки как непустые, используйте if line != '\n'.

Как использовать системную утилиту 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)
Примечание: read_text() загружает весь файл в память, что может быть проблематично при больших размерах.

Посчитать строки в Python - comments

En
посчитать строки python (python)