LINUX.ORG.RU

Python: многострочные строки. Как узнать количество строк? Как перебрать строки?


0

2

Вопрос питонистам.

Есть многострочная строка. Нужно узнать количество строк в ней. Так же нужно уметь перебирать строки. Вопрос: как это делать?

Я пока не придумал ничего лучшего, чем преобразовывать многострочную строку в список через метод splitlines(), и с ним уже работать:

# myStr - многострочная строка

# Количество строк в многострочной строке
linesCount=len(myStr.splitlines())

# Перебор строк в многострочной строке
for line in myStr.splitlines():
 print line

Но это как-то неправильно - примерно в два раза расходуется память. Это нехорошо особенно если многострочная строка получена от какого-нибудь лога выполнения процесса на десяток миллионов строк.

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

★★★★★

linesCount=len(myStr.splitlines())

ну конкретно тут проще посчитать символы конца строки

Но это как-то неправильно - примерно в два раза расходуется память.

не, ну ты конечно можешь итеративно по символам конца строки вырезать подстроки, но есть ли смысл?

lazyklimm ★★★★★
()

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

anonymous
()

Можно использовать StringIO и читать итератором строки как из файла, наверное

michwill ★★★★★
()

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

Матчасть нужно учить. Можешь начать с главы Sequence types - там и строки описаны, и слайсы.

tailgunner ★★★★★
()

Да, если источник данных - в файле, вот это вот жрёт меньше всего памяти:

num_lines = sum(1 for line in open('myfile.txt'))

border-radius
()
'some\nsome\nsome'.count('\n') + 1
'some\nsome\nsome'.split('\n')
C1nde
()
Ответ на: комментарий от tailgunner

мне что-то начало казаться, что этот чел только претворяется незнающим змея...

AGUtilities ★★★
()

Как-то так:

#!/usr/bin/python

if __name__ == '__main__':
    string = """
        This is line 1
        This is line 2
        This is line 3
    """
    array = string.split('\n')
    print "LINES: %s" % len(array)
    for line in array:
        print "LINE: " + line

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от KennyMinigun

Сплиты ж не подходят по условию ТС, надо память экономить.

border-radius
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.