簡體   English   中英

從字母提取Python文本-索引

[英]Python text extraction from letter - index

我想使用Python從txt文件中提取字母的特定部分。 開頭和結尾用清晰的開頭/結尾表達式(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

    "

您的循環為您提供了最后一次出現的開放序列。

您應該將讀取的部分分成兩個循環,如下所示:

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

這樣,您將在第一次出現打開序列時退出循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM