Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Как выбрать текст из файла между двумя известными строками?

#python #строки #текст


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

Я вас любил: любовь еще, быть может,
В душе моей угасла не совсем;
Но пусть она вас больше не тревожит;
Я не хочу печалить вас ничем.
Я вас любил безмолвно, безнадежно,
То робостью, то ревностью томим;
Я вас любил так искренно, так нежно,
Как дай вам бог любимой быть другим. :)


и из этого допустим нам известны строки: "Но пусть она вас больше не тревожит;" и
"То робостью, то ревностью томим;".
Необходимо забрать их и то что между ними, остальное нам ненужно.
    


Ответы

Ответ 1



Если известные строки даны в start, end переменных, то чтобы получить срез состоящий из этих строк и всё что между ними: result = text[text.index(start):text.index(end)+len(end)] Предполагая, что end встречается в text только после start. К примеру: >>> text = '..abc..' >>> start = 'a' >>> end = 'c' >>> text[text.index(start):text.index(end)+len(end)] 'abc' Можно регулярные выражения использовать: >>> import re >>> re.search('{}.*?{}'.format(*map(re.escape, [start, end])), text, re.M).group() 'abc' Чтобы не загружать весь файл в память, можно использовать mmap и байты. См. Поиск паттерна (последовательность байт) в файле (несколько Гб) в Питоне 2 Python multi-line pattern matching

Ответ 2



# если имеются виду строки разделенные '\n', можно не читать файл целиком def get_inside_lines(file: iter, start_line: str, end_line: str) -> iter: for line in file: if line == start_line: yield line for line in file: yield line if line == end_line: return r = ''.join(get_inside_lines(open('111.txt', encoding='utf-8'), 'Но пусть она вас больше не тревожит;\n', 'То робостью, то ревностью томим;\n'))

Комментариев нет:

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