#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'))
Комментариев нет:
Отправить комментарий