Python提取文本文件Start与End间数据并剪切删除原内容的实现方案
文本标记块剪切功能实现方案
原有代码问题
- 仅调用一次
find()方法,只能匹配第一组Start/End标记,无法处理多块场景 - 仅执行了文件读操作,没有将删除提取内容后的剩余内容写回原文件,因此原文件不会发生变更
- 没有做非贪婪匹配限制,若存在多组标记时会直接匹配第一个
Start到最后一个End的全部内容,结果不符合预期
实现思路
- 读取文件全量内容
- 用正则全局非贪婪匹配所有
Start到End的标记块,提取块内有效内容 - 从原内容中删除所有匹配到的标记块
- 将剩余内容写回原文件完成剪切操作
完整实现代码
import re # 标记定义 START_TAG = "Start" END_TAG = "End" file_path = "file.txt" # 读取原文件内容 with open(file_path, "r", encoding="utf-8") as f: content = f.read() # 正则匹配所有Start到End的块,re.DOTALL让.可以匹配换行符,?开启非贪婪匹配 pattern = re.compile(re.escape(START_TAG) + r"(.*?)" + re.escape(END_TAG), re.DOTALL) # 提取所有块内内容,自动去除首尾空白 extracted_blocks = [block.strip() for block in pattern.findall(content)] # 删除原内容中所有匹配的标记块,得到剩余内容 remaining_content = pattern.sub("", content).strip() # 将剩余内容写回原文件 with open(file_path, "w", encoding="utf-8") as f: f.write(remaining_content) # 输出提取到的所有块内容 for idx, block in enumerate(extracted_blocks, 1): print(f"=== 提取到第{idx}个块内容 ===") print(block) print("="*30)
效果说明
以你提供的file.txt为例,运行代码后:
- 会提取到2个标记块的内容,分别对应两个视频的元数据
- 原文件中所有
Start到End的内容会被删除,仅保留块之间的--- Passing Data ---内容(如果需要同时删除这类无意义分隔符,可以在写回前对remaining_content做额外过滤处理)
内容的提问来源于stack exchange,提问作者Yunus Emre Ulusoy
相关产品推荐
相关产品推荐

