Подсчет строк: практическое руководство

Раздел: Основы Python -> Подсчет и агрегация данных

Подсчет количества строк в Python: основные методы

Как эффективно подсчитать строки в большом файле, не загружая его целиком в память?

Самый производительный подход - использование генераторного выражения вместе с функцией sum(). Файл открывается в режиме чтения, и итерация происходит построчно, что требует минимального объема оперативной памяти.


with open('example.txt', 'r', encoding='utf-8') as file:
    line_count = sum(1 for line in file)
print(f'Количество строк: {line_count}')
  

Python количество после запятой (количество знаков после запятой в python)

На каждой итерации генерируется единица, а sum() суммирует их. Этот метод подходит для файлов любого размера и учитывает пустые строки.

Как подсчитать строки в файле с помощью метода readlines()?

Метод readlines() считывает все строки в список, затем берется его длина.


with open('example.txt', 'r') as file:
    lines = file.readlines()
    line_count = len(lines)
print(line_count)
  

Python количество списков в списке (подсчет количества вложенных списков в python)

Проблема: При очень больших файлах список занимает много памяти, что может привести к ошибке MemoryError или замедлению работы программы. Решение - использовать итеративный метод (rbase).

Как подсчитать строки с помощью ручного счетчика в цикле for?

Классический способ - увеличивать счетчик на каждой итерации.


count = 0
with open('example.txt', 'r') as file:
    for line in file:
        count += 1
print(count)
  

Python количество повторений (подсчет количества повторений в python)

Типичная ошибка: Забыть инициализировать счетчик нулем перед циклом или сбросить его внутри цикла. Решение - поместить счетчик до открытия файла и четко разделить логику.

Как посчитать количество строк в текстовой переменной?

Для строки, содержащей несколько строк (разделенных символом \n), можно применить str.count() с учетом последней строки.


text = "Строка1\nСтрока2\nСтрока3"
line_count = text.count('\n') + 1
print(line_count)  # Вывод: 3
  

количество символов python (подсчет количества символов в строке python)

Если текст может оканчиваться на \n (пустая последняя строка), результат будет завышен. Более надежный способ - использовать splitlines() и посчитать длину списка.


lines = text.splitlines()
print(len(lines))
  

Python количество строк (подсчет количества строк в python)

Проблема: Строки, содержащие \r\n или только \r (старые Mac OS), могут быть распознаны неправильно. splitlines() корректно обрабатывает все распространенные концы строк.

Как определить количество строк в DataFrame библиотеки pandas?

У DataFrame есть атрибут .shape, возвращающий кортеж (число строк, число столбцов).


import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3]})
row_count = df.shape[0]
print(row_count)  # Вывод: 3
  

количество цифр python (подсчет количества цифр в python)

Так же можно использовать len(df) - оба способа эквивалентны.

Ошибка: Применение .count() к DataFrame возвращает количество не-NaN значений по столбцам, а не число строк. Следует использовать .shape[0] или len().

Как подсчитать строки в файле с помощью утилиты wc (Linux/Unix)?

Можно вызвать системную команду через модуль subprocess. Однако решение не кроссплатформенное.


import subprocess
result = subprocess.check_output(['wc', '-l', 'example.txt'])
line_count = int(result.split()[0])
print(line_count)
  

Проблема: На Windows утилита wc отсутствует. Для кроссплатформенности рекомендуется использовать чистый Python.

Расширенные примеры подсчета строк

Пример 1. Сравнение производительности методов на большом файле (100 млн строк).

Пример

import time

# Создание тестового файла (занимает время)
with open('big_file.txt', 'w') as f:
    for i in range(100_000_000):
        f.write(f'строка {i}\n')

# Метод 1: readlines
start = time.time()
with open('big_file.txt', 'r') as f:
    len(f.readlines())
print('readlines:', time.time() - start)

# Метод 2: sum(1 for line in file)
start = time.time()
with open('big_file.txt', 'r') as f:
    sum(1 for line in f)
print('generator:', time.time() - start)
readlines: 12.34 сек (может упасть с MemoryError)
generator: 2.15 сек

Генераторный подход работает быстрее и требует значительно меньше памяти.

Пример 2. Подсчет только непустых строк.

Пример

with open('example.txt', 'r') as file:
    non_empty = sum(1 for line in file if line.strip())
print('Непустых строк:', non_empty)

Пример 3. Подсчет строк, содержащих определённую подстроку.

Пример

search = 'ошибка'
with open('log.txt', 'r') as file:
    count = sum(1 for line in file if search in line)
print(f'Строки с "{search}": {count}')

Пример 4. Частотный анализ строк с помощью collections.Counter.

Пример

from collections import Counter

with open('words.txt', 'r') as file:
    lines = [line.strip() for line in file if line.strip()]
counter = Counter(lines)
print(counter.most_common(3))
[('apple', 15), ('banana', 10), ('cherry', 8)]

Пример 5. Подсчет строк во всех файлах в директории (рекурсивно).

Пример

import glob

total = 0
for filepath in glob.glob('**/*.py', recursive=True):
    with open(filepath, 'r', encoding='utf-8') as f:
        total += sum(1 for line in f)
print('Всего строк кода:', total)

Пример 6. Подсчет строк в строковом потоке (StringIO).

Пример

from io import StringIO

text_data = """Первая строка
Вторая строка
Третья строка"""
stream = StringIO(text_data)
line_count = sum(1 for line in stream)
print('Строк в потоке:', line_count)  # Вывод: 3

Пример 7. Подсчет строк в stdin (например, при конвейерной обработке).

Пример

import sys
line_count = sum(1 for line in sys.stdin)
print(f'Получено {line_count} строк из stdin')

Пример 8. Подсчет строк с корректной обработкой разных концов строк (\r\n, \n, \r).

Пример

mixed_text = "line1\r\nline2\nline3\rline4"
# splitlines без аргументов обрабатывает все
lines = mixed_text.splitlines()
print('Количество строк:', len(lines))  # Вывод: 4

Пример 9. Использование memory-mapped файла для очень больших данных.

Пример

import mmap

with open('huge.txt', '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)
        # Последняя строка без \n
        if mm[-1] != ord('\n'):
            count += 1
print('Строк в отображенном файле:', count)

Подсчет количества строк в Python - comments

En
Python количество строк (python)