簡體   English   中英

刪除特定行並在 python 中插入新行

[英]delete specific lines and insert new line in python

我在處理一些 python 代碼時遇到了困難。 我瀏覽了許多提出類似問題的問題,但實際上我找不到解決問題的關鍵。

我真正想做的是通過在代碼中使用'paragraph_b'的名稱來刪除具有隨機內容的整個特定段落(這意味着,對於下面的示例,從'paragraph_a'到括號')')。

這是我的代碼的輸入文本文件格式。

some random texts (100+ lines)

...

paragraph_a A_story(    
...
some random texts
...
)

paragraph_b different_story(
...
some random texts
...
)

以下是所需的 output

some random texts (100+ lines)

...

story "A is deleted"

paragraph_b different_story(
...
some random texts
...
)

總結一下,

這里總結了我想做的事情。

  1. 使用代碼中下一段(paragraph_b)的名稱刪除paragraph_a。 (我想我需要為此設置明確的范圍。)
  2. 然后,在已刪除的部分添加某些文本,例如:故事“A 已刪除”。

我已經嘗試在讀取模式下打開輸入文件生成 output 文件在寫入模式下並通過 readlines() 然后我做了一些標志,如果不讀取paragraph_a,它們只會變為'1'。

但它只刪除了段落的第一行..

下面的代碼是我到目前為止嘗試過的

def erase(file_name: str, start_key: str, stop_key: str):
    try: 
        # read the file lines
        with open('input.txt', 'r+') as fr: 
            lines = fr.readlines()
        # write the file lines except the start_key until the stop_key
        with open('output.txt', 'w+') as fw:

            delete = False

            for line in lines:

                if line.strip('\n') == start_key:
                     delete = True

                elif line.strip('\n') == stop_key:
                     delete = False

                if not delete:
                    fw.write(line)
    except RuntimeError as ex: 
        print(f"erase error:\n\t{ex}")

def main():
    erase('input.txt','paragraph_a','paragraph_b')

if __name__== "__main__":
    main()

但是 output 變得與輸入相同..

我該如何處理? 任何答案或線索都會非常有幫助。

謝謝。

您可以對整個文件內容應用多行正則表達式,

r"^(\w+ \w+\((?:(.|\n)*)\))\s*^paragraph_b"

然后替換匹配的組。

在此處查看正則表達式: https://regex101.com/r/pwGVbe/1

Python 的re模塊為您提供了此功能。

暫無
暫無

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

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