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

如何检测目录随时间新增的文件 避免重复读取已处理旧文件

实现方法

核心逻辑是本地持久化保存已处理过的文件记录,每次运行时跳过已在记录中的文件,仅处理新增文件,首次运行时记录文件为空,会自动处理当前目录下所有符合要求的.ls文件,完全匹配需求。

具体实现要点

  • 在脚本同级目录维护一个记录文件processed_files.txt,逐行存储已经处理过的文件名
  • 脚本启动时先读取该记录文件,将所有已处理文件名存入集合(集合的成员判断效率远高于列表),如果记录文件不存在(即首次运行),则初始化空集合
  • 遍历目录文件时,除了校验.ls后缀,额外判断文件是否不在已处理集合中,满足条件才执行处理逻辑
  • 每处理完一个新文件,立刻将文件名追加写入记录文件,避免脚本中途异常中断导致下次运行重复处理
  • 替换原代码中硬拼接路径的写法,用os.path.join做路径拼接,兼容Windows、macOS、Linux不同系统的路径分隔符

修改后的可直接运行代码

import os

# 配置项
target_dir = path  # 替换为你实际存储.ls文件的目录路径
record_file_path = "processed_files.txt"  # 已处理文件记录的存储路径

# 加载已处理文件集合
processed_files = set()
if os.path.exists(record_file_path):
    with open(record_file_path, "r", encoding="utf-8") as f:
        for line in f:
            file_name = line.strip()
            if file_name:
                processed_files.add(file_name)

# 遍历目录处理新文件
for file in os.listdir(target_dir):
    # 跳过非.ls后缀、已经处理过的文件
    if not file.endswith(".ls") or file in processed_files:
        continue
    # 拼接跨平台兼容的安全文件路径
    filepath = os.path.join(target_dir, file)
    # 调用文件读取处理函数
    axisMonitorAverage(filepath)
    # 处理完成后立刻记录文件名,避免下次重复处理
    with open(record_file_path, "a", encoding="utf-8") as f:
        f.write(f"{file}\n")
    processed_files.add(file)

可选优化方向

  • 如果目录下存在重名文件的可能,可以把记录内容从文件名换成「文件绝对路径+文件修改时间/文件MD5」,避免重名文件被误判为已处理
  • 如果需要控制记录文件大小,可以加定期清理逻辑,比如删除超过180天的旧记录,避免记录文件无限增长
  • 对文件处理逻辑加异常捕获,处理失败的文件不要写入记录,下次运行可以自动重试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:18:12