Как узнать количество строчек в файле с помощью Python

Раздел: Ввод-вывод -> Файловый ввод-вывод

Способы подсчета строк в Python

Самый простой и надежный метод для большинства файлов - использовать генераторное выражение с sum.


with open('file.txt', 'r') as f:
    count = sum(1 for line in f)
  

ввод программ на python (ввод данных в программе python)

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

Возможные проблемы и ошибки

  • Файл не найден - ошибка FileNotFoundError. Путь можно проверить или применить try/except.
  • Файл открыт в неверной кодировке - UnicodeDecodeError. Указывается encoding='utf-8' или другая подходящая кодировка.
  • Файл очень большой, но sum(1 for line in f) все равно работает без загрузки в память.

Как посчитать строки с помощью readlines()?

Метод readlines() считывает все строки в список, затем len().


with open('file.txt') as f:
    lines = f.readlines()
    count = len(lines)
  

Python file io (ввод-вывод файлов в python)

Недостаток:

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

Проблема: MemoryError при файлах размером более доступной оперативной памяти. Решение - использовать итератор (основной способ).

Как подсчитать строки с нумерацией через enumerate?

Использование enumerate для получения номера последней строки.


with open('file.txt') as f:
    for count, line in enumerate(f, start=1):
        pass
  

Python temp files (временные файлы в python)

После цикла переменная count содержит количество строк. Метод похож на sum, но дает возможность обработать каждую строку.

Ошибка: если файл пустой, count останется 0 (так как цикл не выполнится). В коде выше переменная count будет определена, но при пустом файле она не инициализируется. Лучше устанавливать count=0 перед циклом.

Как использовать системную команду wc -l в Linux?

Вызов внешней утилиты через os.popen или subprocess.


import os
result = os.popen('wc -l file.txt').read().strip()
count = int(result.split()[0])
  

Python index files (индексация файлов в python)

Преимущества:

Очень быстрый подсчет для больших файлов, так как wc оптимизирован. Недостатки: только Linux/Unix, зависимость от внешней команды.

Проблема: команда может отсутствовать в системе, или путь к файлу с пробелами - требуется экранирование. Целесообразно использовать subprocess.run с shell=False для безопасности.

Как подсчитать строки в огромном файле с помощью mmap?

memory-map (mmap) отображает файл в виртуальную память и позволяет считать символы новой строки.


import mmap

with open('file.txt', 'r+b') as f:
    mm = mmap.mmap(f.fileno(), 0)
    count = 0
    while mm.find(b'\n') != -1:
        mm.seek(mm.find(b'\n') + 1)
        count += 1
    mm.close()
  

File python class (класс для работы с файлами в python)

Более сложный код, но максимально производительный для файлов, которые не помещаются в оперативную память.

Ошибка: mmap доступен только на Unix и Windows, но на Windows могут быть ограничения. Также требуется корректное закрытие mmap. Для простоты чаще используют sum.

Как посчитать строки в CSV через pandas?

Если файл в формате CSV, можно загрузить его в DataFrame и узнать количество строк.


import pandas as pd
df = pd.read_csv('file.csv')
count = len(df)
  

Удобно, когда требуется дальнейшая обработка данных. Недостаток: загружает весь файл в память.

Проблема: при большом CSV может не хватить памяти. Можно применить chunksize для итеративного чтения.

- Python copy file (копирование файла в python)
- Python log file (логирование в файл в python)
- Python file methods (методы работы с файлами в python)

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

Подсчет непустых строк

Пример

with open('file.txt') as f:
    non_empty = sum(1 for line in f if line.strip())
print(non_empty)  # Вывод: 42
42

Подсчитываются только строки, содержащие хотя бы один непробельный символ.

Подсчет строк в нескольких файлах с суммированием

Пример

import glob
total = 0
for path in glob.glob('*.txt'):
    with open(path) as f:
        total += sum(1 for _ in f)
print(total)  # Вывод: 157
157

Обходит все файлы с расширением .txt в текущей директории.

Подсчет строк в сжатом gzip-файле

Пример

import gzip
with gzip.open('file.txt.gz', 'rt', encoding='utf-8') as f:
    count = sum(1 for _ in f)
print(count)  # Вывод: 89
89

Файл распаковывается на лету, память не тратится на полную распаковку.

Подсчет строк без комментариев (строки, начинающиеся с #)

Пример

with open('config.ini') as f:
    code_lines = sum(1 for line in f if not line.strip().startswith('#'))
print(code_lines)  # Вывод: 28
28

Игнорирует строки, начинающиеся с символа решетки после удаления пробелов.

Подсчет строк с обработкой ошибок кодировки

Пример

try:
    with open('file.txt', 'r', encoding='utf-8') as f:
        count = sum(1 for _ in f)
except UnicodeDecodeError:
    with open('file.txt', 'r', encoding='cp1251') as f:
        count = sum(1 for _ in f)
print(count)  # Вывод: 123
123

Пытается открыть файл в UTF-8, при ошибке переключается на cp1251.

Подсчет строк с использованием pathlib для рекурсивного обхода

Пример

from pathlib import Path
total = 0
for path in Path('logs').rglob('*.log'):
    with open(path) as f:
        total += sum(1 for _ in f)
print(total)  # Вывод: 1001
1001

Рекурсивно перебирает все .log файлы в папке logs и подпапках.

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

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