Извлечение текста Python из буквы - указатель - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу извлечь определенную часть письма из текстового файла с помощью Python.Начало и окончание помечаются четкими выражениями начала / конца (letter_begin / letter_end).Моя проблема заключается в том, что «запись» текста должна начинаться с самого первого появления любого элемента в списке letter_begin и заканчиваться самым последним элементом в списке letter_end (буфер +3 строки).Я хочу записать выходной текст в файл.Вот мой пример текста и мой код:

sample_text = """Some random text right here 
.........
Dear Shareholders: We are pleased to provide this report to our shareholders and fellow shareholders. we thank you for your continued support.
Best regards, 
Douglas - Director


Other random text in this lines """

letter_begin = ["dear", "to our shareholders", "fellow shareholders"]
letter_end = ["best regards", "respectfully submitted", "thank you for your continued support"]

with open(filename, 'r', encoding="utf-8") as infile, open(xyz.txt, mode = 'w', encoding="utf-8") as f: 
        text = infile.read()
        lines = text.strip().split("\n")
        target_start_idx = None
        target_end_idx = None
        for index, line in enumerate(lines):
            line = line.lower()
            if any(beg in line for beg in letter_begin):
                target_start_idx = index
                continue
            if any(end in line for end in letter_end):
                target_end_idx = index + 3
                break


        if target_start_idx is not None:
            target = "\n".join(lines[target_start_idx : target_end_idx])
            f.write(str(target))

мой желаемый результат должен быть:

output = "Dear Shareholders: We are pleased to provide this report to our shareholders and fellow shareholders. we thank you for your continued support.
    Best regards, 
    Douglas - Director

    "

1 Ответ

0 голосов
/ 20 ноября 2018

Ваш цикл дает вам последнее вхождение последовательности открытия.

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

with open(filename, 'r', encoding="utf-8") as infile:

    text = infile.read()
    lines = text.strip().split("\n")
    target_start_idx = None
    target_end_idx = None
    for index, line in enumerate(lines):
        line = line.lower()
        if any(beg in line for beg in letter_begin):
            target_start_idx = index
            break
    for index, line in enumerate(lines):
        if any(end in line for end in letter_end):
            target_end_idx = index + 3
            continue

Таким образом, вы выходите из цикла, когда first вхождение последовательности открытияпоявляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...