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

I am creating a python movie player/maker, and I want to find the number of lines in a multiple line string. I was wondering if there was any built in function or function I could code to do this:

x = """
line1
line2 """

getLines(x)

asked Jan 18, 2016 at 2:31

falcon user's user avatar

3

If newline is 'n' then nlines = x.count('n').

The advantage is that you don’t need to create an unnecessary list as .split('n') does (the result may differ depending on x.endswith('n')).

str.splitlines() accepts more characters as newlines: nlines = len(x.splitlines()).

answered Jan 18, 2016 at 6:28

jfs's user avatar

jfsjfs

396k191 gold badges976 silver badges1666 bronze badges

1

You can split() it and find the length of the resulting list:

length = len(x.split('n'))

Or you can count() the number of newline characters:

length = x.count('n')

Or you can use splitlines() and find the length of the resulting list:

length = len(x.splitlines())

answered Jan 18, 2016 at 2:34

TigerhawkT3's user avatar

TigerhawkT3TigerhawkT3

48.2k6 gold badges58 silver badges96 bronze badges

SPAMnEGGSnBEANS = Three lines, two line breaks

So if counting lines, use + 1, or you’ll make a fencepost error:

x.count( "n" ) + 1

answered Jan 23, 2020 at 11:20

c z's user avatar

c zc z

7,4723 gold badges43 silver badges58 bronze badges

You can do:

len(x.split('n'))

answered Jan 18, 2016 at 2:33

heemayl's user avatar

heemaylheemayl

38.7k7 gold badges66 silver badges74 bronze badges

Строковые переменные имеют метод splitlines, который можно использовать для разбиения на строки. При этом будут правильно обработаны различные способы разбиения на строки и крайние случаи с наличием переноса строки в конце:

def lines_count(s):
    return len(s.splitlines())

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


Если использовать метод count, то нужно проверять наличие переноса строки на конце:

def lines_count(s):
    if not s:
        return 0

    count = s.count('n')
    if not s.endswith('n'):
        count += 1
    return count

Здесь распознаются только символы n, но не создаётся список.
К сожалению, добавить распознавание всех случаев из splitlines довольно трудоёмко.


Насколько я понимаю, в стандартной библиотеке Python нет функции, объединяющей достоинства обоих методов.

  • python строки

Ответы

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

Ivan Mamtsev

18 июля 2022

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

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



0



0

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

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

курс

Основы Python

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

58 часов

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

курс

Python: Автоматическое тестирование

13 часов

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

курс

Python: Веб-разработка (Flask)

22 часа

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

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

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

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


01 ноября 2021

2

ответа

  • python строки

Как посчитать количество заглавных букв в строке python


01 ноября 2021

1

ответ

  • python строки
  • python массивы

Как узнать количество строк в массиве python


01 ноября 2021

1

ответ

  • python строки

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


01 ноября 2021

1

ответ

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

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

Решение задачи на языке программирования 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

Допустим, вам нужно узнать, сколько строк в вашем файле, но файл достаточно большой, и вам бы не хотелось читать его полностью. В этой статье мы расскажем, как получить количество строк в файле при помощи 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».

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