Как посчитать количество строк в файле

Допустим, вам нужно узнать, сколько строк в вашем файле, но файл достаточно большой, и вам бы не хотелось читать его полностью. В этой статье мы расскажем, как получить количество строк в файле при помощи Python.

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

Считаем количество строк в файле при помощи функции enumerate()

Чтобы узнать количество строк в текстовом файле при помощи Python, выполните следующие шаги.

  1. Откройте файл в режиме чтения.
    Чтобы открыть файл, передайте путь к файлу и режим доступа r в функцию open().
    Например, fp = open(r'File_Path', 'r').
  2. Используйте цикл for с функцией enumerate(), чтобы получить строку и ее номер.
    Функция enumerate() добавляет счетчик в итерируемый объект и возвращает его в объекте enumerate. Передайте указатель файла, возвращенный функцией open(), в функцию enumerate(). Функция enumerate() добавит счетчик к каждой строке.
    Полученный объект enumerate можно использовать в цикле для доступа к номеру строки. Верните счетчик, когда строка закончится.
  3. Закройте файл после завершения операции чтения.
    Нам нужно убедиться, что файл будет правильно закрыт после завершения операции чтения. Используйте fp.close() для закрытия файла.

Примечание редакции. Об открытии, чтении, записи и закрытии файлов читайте в статье “Работа с файлами в Python”.

Для примера давайте узнаем, сколько строк в файле “read_demo.txt”. На скриншоте можно видеть содержимое файла.

Текстовый файл
# Открыть файл в режиме чтения
with open(r"E:\demos\files\read_demo.txt", 'r') as fp:
    for count, line in enumerate(fp):
        pass
print('Total Lines', count + 1)

# Вывод:
# Total Lines 8

Функция enumerate() добавляет счетчик к каждой строке. Считая строки таким образом, мы не занимаем лишнюю память. Это полезно, если размер файла большой.

enumerate(file_pointer) не загружает весь файл в память, поэтому это эффективный и быстрый способ посчитать количество строк в файле.

Подсчет строк при помощи генераторного выражения

Быстрым и компактным решением для получения количества строк может быть генераторное выражение.

Если файл большой (например, если размер файла измеряется гигабайтами), то для ускорения работы следует использовать генератор. Чтобы получить еще более быстрое решение, используйте небуферизованный (сырой) интерфейс, применяя байтовые массивы и делая свою собственную буферизацию.

def _count_generator(reader):
    b = reader(1024 * 1024)
    while b:
        yield b
        b = reader(1024 * 1024)

with open(r'E:\demos\files\read_demo.txt', 'rb') as fp:
    c_generator = _count_generator(fp.raw.read)
    # count each \n
    count = sum(buffer.count(b'\n') for buffer in c_generator)
    print('Total lines:', count + 1)

# Вывод:
# Total lines: 8

Как получить количество строк в файле при помощи функции readlines()

Если размер вашего файла невелик и вас не беспокоит производительность, то лучше всего подойдет метод readlines().

Это самый простой способ узнать количество строк в текстовом файле в Python.

Сначала мы при помощи метода readlines() считываем все строки из файла и сохраняем их в списке. Затем с помощью функции len() мы находим длину списка, которая представляет собой не что иное, как общее количество строк в файле.

Чтобы прочитать все строки, откройте файл и примените метод readlines() к указателю на файл.

Пример:

with open(r"E:\demos\files\read_demo.txt", 'r') as fp:
    x = len(fp.readlines())
    print('Total lines:', x) # 8

Примечание. Этот способ не является экономичным, поскольку загружает весь файл в память. Это самый существенный недостаток, если вы работаете с большими файлами, размер которых исчисляется гигабайтами.

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

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

with open(r"E:\demos\files\read_demo.txt", 'r') as fp:
    num_lines = sum(1 for line in fp)
    print('Total lines:', num_lines) # 8

Если вы хотите исключить подсчет пустых строк, используйте приведенный ниже пример.

with open(r"E:\demos\files\read_demo.txt", 'r') as fp:
    num_lines = sum(1 for line in fp if line.rstrip())
    print('Total lines:', num_lines)  # 8

Считаем количество строк в файле при помощи оператора in и цикла

Используя оператор in и цикл, мы можем посчитать непустые строки в файле.

Для этого сперва установите счетчик на ноль. Затем используйте цикл for для чтения каждой строки файла. Если строка непустая, увеличивайте счетчик строк на 1.

Пример:

# open file in read mode
with open(r"E:\demos\files_demos\read_demo.txt", 'r') as fp:
    count = 0
    for line in fp:
        if line != "\n":
            count += 1
print('Total Lines', count)

Как исключить пустые строки при подсчете

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

Jessa = 70
Kelly = 80
Roy  = 90

Emma = 25
Nat = 80
Sam = 75

Все рассмотренные нами подходы позволяют узнать общее количество строк, включая пустые. В этом примере мы рассмотрим, как подсчитать количество строк в файле, исключая пустые строки.

Пример:

count = 0
with open('read_demo.txt') as fp:
    for line in fp:
        if line.strip():
            count += 1

print('number of non-blank lines', count)

# Вывод:
# number of non-blank lines 6

Заключение

Если у вас небольшой файл, самый лучший способ посчитать строки в нем – использовать метод readlines() или цикл.

Если вы работаете с большими файлами, лучше используйте генераторное выражение.

Также можно использовать цикл и функцию enumerate(), потому что это позволяет не загружать весь файл в память.

Перевод статьи Vishal «Python Count Number of Lines in a File».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *