You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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()实现持续监控,间隔时间可根据实际需求调整
  • 异常处理:增加文件不存在的捕获,避免程序直接崩溃

你原代码的问题

  1. 文件名拼写错误:tex1.txt应为text1.txt
  2. 无位置记录:每次从头读取文件,会重复处理已提取的内容
  3. 逻辑缺失:没有实现从example到A的内容提取逻辑,也没有循环持续监控的机制
  4. 变量未定义:代码中character和k变量未定义,执行时会直接报错

内容的提问来源于stack exchange,提问作者wertyu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:15:23