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

Prerequisites: File Handling in Python 

Counting the number of characters is important because almost all the text boxes that rely on user input have a certain limit on the number of characters that can be inserted. For example, If the file is small, you can use readlines() or an A loop approach. If you have a lot of files to work with To determine line count, use the Generator and Raw interface,  If you don’t want to load the complete file in, utilize a loop and enumerate() for huge files. This program in Data file handling in Python emphasizes counting the number of lines in a text file in Python. 

Below is the implementation. 

Let’s suppose the text file looks like this – 

myfile.txt

Method 1: Python count numbers of lines in a string using readlines()

The readlines() are used to read all the lines at a single go and then return them as each line a string element in a list. This function can be used for small files

Python3

with open(r"myfile.txt", 'r') as fp:

    lines = len(fp.readlines())

    print('Total Number of lines:', lines)

Output:

Total Number of lines: 5

Time complexity: O(n).
Auxiliary space: O(1).

Method 2: Python count number of lines in text file using enumerate

Enumerate() method adds a counter to an iterable and returns it in a form of enumerating object. 

Python3

with open(r"myfile.txt", 'r') as fp:

    for count, line in enumerate(fp):

        pass

print('Total Number of lines:', count + 1)

Output:

Total Number of lines: 5

Time complexity: O(n), where n is the number of lines in the text file
Auxiliary space: O(1)

Method 3: Use Loop and Counter to Count Lines

Loops python is used for sequential traversal. here we will count the number of lines using the loop and if statement. if help us to determine is there any character or not, if there will be any character present the IF condition returns true and the counter will increment.

Python3

file = open("gfg.txt", "r")

Counter = 0

Content = file.read()

CoList = Content.split("n")

for i in CoList:

    if i:

        Counter += 1

print("This is the number of lines in the file")

print(Counter)

Output:

This is the number of lines in the file
4

Method 4: Use Loop and Sum function to Count Lines

Loops python is used for sequential traversal. here we will count the number of lines using the sum function in Python. if help us to determine is there any character or not, if there will be any character present the IF condition returns true and the counter will increment.

Python3

with open(r"myfile.txt", 'r') as fp:

    lines = sum(1 for line in fp)

    print('Total Number of lines:', lines)

Output:

Total Number of lines: 5

Last Updated :
21 Feb, 2023

Like Article

Save Article

Вывести количество строк с помощью регулярного выражения. Особенность. Если последняя строка не пустая, то выведет количество на 1 элемент меньше.

import re
# выведет все строки включая пустые
len(re.findall(r"[n']+?", open('bash.txt').read()))

# выведет количество без пустых строк
len(re.findall(r"[n']+", open('bash.txt').read()))

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

пример текстового файла

1. sudo pip3 install django-markdown-deux
2. sudo pip3 install django-filter
3. sudo pip3 install sorl-thumbnail
4. sudo apt-get install libjpeg62 libjpeg62-dev zlib1g-dev
5. sudo pip3 install Pillow
6. sudo apt-get install libgraphicsmagick++-dev
7. sudo apt-get install libboost-python1.40-dev
8. sudo apt-get install imagemagick
9. sudo apt-get install graphicsmagick
10. 
11. 
12. sudo apt-get install libmagickwand-dev
13. sudo pip3 install Wand
14. 
15. sudo python3 manage.py makemigrations thumbnail

Как это работает. В данном случае жадность регулярного выражения отключена.

>>> re.findall(r"[n']+?", open('bash.txt').read())
['n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'n']
14

Жадность включена, из-за жадности регулярных выражений nn будут вместе там где ничего нет кроме переноса

>>> re.findall(r"[n']+", open('bash.txt').read())
['n', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'nnn', 'n', 'nn', 'n']
11

Если посчитаем стандартно, то получим включая пустые строки, что пустая строка тоже строка. Этот метод считает всегда количество строк как мы это понимаем.

>>> len(open('bash.txt').readlines())
15

Причина по которой отличается количество

'sudo pip3 install django-markdown-deuxnsudo pip3 install django-filternsudo pip3 install sorl-thumbnailnsudo apt-get install libjpeg62 libjpeg62-dev zlib1g-devnsudo pip3 install Pillownsudo apt-get install libgraphicsmagick++-devnsudo apt-get install libboost-python1.40-devnsudo apt-get install imagemagicknsudo apt-get install graphicsmagicknnnsudo apt-get install libmagickwand-devnsudo pip3 install Wandnnsudo python3 manage.py makemigrations thumbnail'

видна здесь, в конце нет переноса строки который считаем.

Вариант исправления количества строк для регулярных выражений, файл придется читать второй раз с конца.

from __future__ import with_statement #tell()

with open('bash.txt', "r") as f:
    f.seek (0, 2)
    fsize = f.tell()
    f.seek (max (fsize-68, 0), 0)
    lines = f.readlines()
lines[-1:]
if 'n' in lines[-1:]:
    print("no")
else:
    print("+1")

Если символа переноса в последней строке нет, то прибавить плюс 1, в данном случае просто вывод на экран.

Алтернативное решение этой же проблемы чтение файла с начала построчно, далее взять последнюю строку и проверить в ней символ

open('bash.txt', "r").readlines()[-1:]

  • python строки
  • файлы

Ответы

Аватар пользователя Ivan Mamtsev

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

line_count = sum(1 for line in open('file.txt'))



0



1

Аватар пользователя Pasha_ Rr

для подсчёта строк, слов, символов:

import os

file = open('some_file.txt', 'r')

lines = 0
words = 0
symbols = 0

for line in file:
    lines += 1
    words += len(line.split())
    symbols += len(line.replace(' ', '')) 

print("кол-во строк:", lines)
print("кол-во слов:", words)
print("кол-во букв(без учета пробелов):", symbols)



0



0

Добавьте ваш ответ

Рекомендуемые курсы

12 часов

Старт в любое время

11 часов

Старт в любое время

Типы данных и основные конструкции Python, поиск и анализ ошибок в коде, создание несложных программ

58 часов

Старт в любое время

Похожие вопросы

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

Считаем количество строк в файле при помощи функции 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:demosfilesread_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:demosfilesread_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:demosfilesread_demo.txt", 'r') as fp:
    x = len(fp.readlines())
    print('Total lines:', x) # 8

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

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

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

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

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

with open(r"E:demosfilesread_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:demosfiles_demosread_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».

Подсчет строк, слов и символов в файле

Написать программу, которая считает количество
строк, слов и символов
в текстовом файле.

Решение задачи на языке программирования Python

Цикл for языка Python извлекает из файлового объекта данные построчно (одну строку на каждой итерации цикла). Таким образом, количество итераций цикла определит количество строк в файле.

Встроенная функция len() языка Python считает количество элементов в передаваемой в нее структуре. С ее помощью находится количество символов в каждой строке.

Строковый метод split() разбивает строку на части. По-умолчанию разделение происходит по местам расположения пробелов в строке. Таким образом, мы можем определить количество слов в каждой строке, посчитав с помощью len() слова в получившемся после применения split() списке.

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

file = open('text.txt')
 
lines = 0
words = 0
symbols = 0
 
for line in file:
    lines += 1
    words += len(line.split())
    symbols += len(line)
 
print("Lines:", lines)
print("Words:", words)
print("Symbols:", symbols)

Пусть содержимое файла text.txt будет таким:

one two three
city town
big small

Тогда программа даст следующий результат:

Lines: 3
Words: 7
Symbols: 34

Cимволами считаются не только буквы, также пробелы и переходы на новую строку (символ 'n'). Если требуется не учитывать переход на новую строку как символ, его можно “отрезать” с помощью строкового метода strip(). Делается это перед тем, как строка передается в функцию len(): symbols += len(line.strip('n')).

Если данную задачу надо решить без использования продвинутых возможностей (встроенных функций и методов) языка программирования Python, а в рамках изучения алгоритмов или на более “низком” уровне, то программа может выглядеть так:

file = open('text.txt')
text = file.read()
 
lines = 0
words = 0
symbols = 0
 
in_word = False
 
for char in text:
    symbols += 1
    if char == 'n':
        lines += 1
 
    if char != ' ' and char != 'n' and in_word == False:
        words += 1
        in_word = True
    elif char == ' ' or char == 'n':
        in_word = False
 
 
print("Lines:", lines)
print("Words:", words)
print("Symbols:", symbols)

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

Для подсчета слов требуется определить в программе еще одну переменную, в которой будет хранится “сигнал”, находимся ли мы внутри слова. Если это так, то очередной непробельный символ не следует считать началом нового слова и не надо увеличивать счетчик слов.

Алгоритм подсчета слов в программе выше следующий. Если текущий символ не пробел И не переход на новую строку, И ранее мы находились вне слова (in_word == False), то есть соблюдены все три условия сразу, значит началось новое слово. Поэтому увеличиваем счетчик слов и устанавливаем in_word в значение True. Последнее действие позволит на следующей итерации цикла, при условии обработки второй и послеющих букв слова, не соблюдаться условию in_word == False и не увеличивать счетчик слов.

Мы “сбрасываем” in_word в False, только когда встречаем пробельный символ ИЛИ переход на новую строку (любое одно из двух условий).

Программа выше, также как в первом варианте, считает переход на новую строку за символ. Если требуется его исключить, можно поместить увеличение значения счетчика символов в ветку else:

...
for char in text:
    if char == 'n':
        lines += 1
    else:
        symbols += 1
 
    ...

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

Если файл большой, то считывать сразу все его содержимое в строковую переменную (text = file.read()) неблагоразумно. Если читать файл посимвольно (file.read(1)), то условием завершения работы цикла будет момент возрата методом read() пустой строки, что означает конец файла (в других языках может быть специальный символ конца файла, доступный через идентификатор EOF – end of file).

lines = 0
words = 0
symbols = 0
 
in_word = False
 
with open('text.txt') as file:
    while True:
        char = file.read(1)
        if char == '':
            break
 
        symbols += 1
        if char == 'n':
            lines += 1
 
        if char not in (' ', 'n') and not in_word:
            words += 1
            in_word = True
        elif char in (' ', 'n'):
            in_word = False
 
 
print("Lines:", lines)
print("Words:", words)
print("Symbols:", symbols)

В этом примере для открытия файла используется оператор with, который рекомендован для работы с файлами. Выражения char not in (' ', 'n') and not in_word и char in (' ', 'n') по смыслу аналогичны соответствующим логическим выражениям из предыдущих вариантов программы.

Больше задач в PDF

Добавить комментарий