如何用Python循环提取文件中指定字符串到特定字符间的内容?
解决方案
核心实现逻辑
要实现持续监控文件并提取指定内容,关键要解决两个问题:避免重复处理已读内容和精准提取目标片段:
- 记录每次处理到的文件位置,后续只读取新增的部分
- 用正则表达式匹配所有
example到下一个A之间的内容,提取后去掉结尾的A再追加到目标文件 - 循环定期检查文件是否有更新
完整代码
import re import time def monitor_and_extract(): # 记录上次处理到的文件位置,初始为0 last_pos = 0 target_str = "example" stop_char = "A" source_file = "text1.txt" dest_file = "text2.txt" while True: try: with open(source_file, "r") as f: # 移动到上次处理的位置 f.seek(last_pos) # 读取新增内容 new_content = f.read() if new_content: # 匹配所有从example到第一个A的片段(非贪婪匹配) pattern = re.compile(re.escape(target_str) + r".*?" + re.escape(stop_char)) matches = pattern.findall(new_content) if matches: # 去掉每个匹配结果末尾的A,然后追加到目标文件 with open(dest_file, "a") as df: for match in matches: df.write(match[:-1]) # 更新上次处理的位置 last_pos = f.tell() except FileNotFoundError: # 源文件不存在时等待1秒再重试 pass # 每隔1秒检查一次文件更新,可根据需求调整间隔 time.sleep(1) if __name__ == "__main__": monitor_and_extract()
代码关键说明
- 位置记录:用
f.seek(last_pos)和f.tell()实现只读取文件新增的部分,避免重复处理已提取的内容 - 正则匹配:
re.escape()确保特殊字符不会干扰匹配规则,.*?是非贪婪匹配,保证每个example对应最近的一个A - 循环监控:
while True配合time.sleep()实现持续监控,间隔时间可根据实际需求调整 - 异常处理:增加文件不存在的捕获,避免程序直接崩溃
你原代码的问题
- 文件名拼写错误:
tex1.txt应为text1.txt - 无位置记录:每次从头读取文件,会重复处理已提取的内容
- 逻辑缺失:没有实现从
example到A的内容提取逻辑,也没有循环持续监控的机制 - 变量未定义:代码中
character和k变量未定义,执行时会直接报错
内容的提问来源于stack exchange,提问作者wertyu
相关产品推荐
相关产品推荐

