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

Python瞬时文件删除:高速生成场景下_GOOD_文件批量删除异常排查

文件夹监控与文件删除问题分析

我写了一个循环脚本,用来等特定文件夹生成后,删除里面文件名含“GOOD”的图片(这些图片也是机器生成的)。脚本在本地笔记本模拟环境里运行正常,但在目标机器上,文件删除没法连续执行——只删1-2张就回到循环,可机器还在不停生成新图片。

目标机器生成图片的速度极快,捕获后立刻生成。这会不会是问题根源?是脚本跟不上生成速度,还是代码本身有问题?求解!

原代码

reel_folders_src = \\directory_of_folders_that_are_yet_to_exist\\

def wait_for_reelfolders(folder_paths):
  last_modified_folder = {folder_path3: None for folder_path3 in folder_paths}

  while True:
    print("Waiting for other reel folders")
   
    for folder_path3 in folder_paths:
      if os.path.exists(folder_path3):
        current_modified = os.path.getmtime(folder_path3)
        if last_modified_folder[folder_path3] is None or current_modified > last_modified_folder[folder_path3]:
          last_modified_folder[folder_path3] = current_modified
          #delete_files_in_folder(folder_path3)
          for file_name in os.listdir(folder_path3):
            file_path = os.path.join(folder_path3, file_name)
            print(f"Ongoing GOOD image purge in folder '{folder_path3}'")
            if "_GOOD_" in file_path:
              os.remove(file_path)

#These are the folders that are yet to be generated by the machine along with images inside of them 
reel_folders = [reel_folders_src + '\\' + "Reel2", reel_folders_src + '\\' + "Reel3", reel_folders_src + '\\' + "Reel4"]

#Execute function 
wait_for_reelfolders(reel_folders)

问题根源

  1. 依赖文件夹修改时间的逻辑有缺陷:系统里文件夹的修改时间(mtime)不一定会随文件生成连续更新——部分系统仅在文件夹本身属性变化(比如新增子文件夹)时才更新mtime,机器快速生成文件时,可能只触发一次mtime变化,后续新文件没法触发删除逻辑。
  2. 遍历不及时:每次只在mtime变化时遍历一次文件夹,机器生成速度快的话,遍历过程中新增的文件不会被处理,之后也没有再次遍历的触发条件。
  3. 无错误处理:机器生成图片后可能还在占用文件,直接删除会抛出异常,原代码没做捕获,一旦报错就会终止当前删除流程,后续文件也没法处理。

修复方案

直接修改监控逻辑,改成定期遍历文件夹,同时增加错误处理:

import os
import time

# 用原始字符串避免路径转义问题
reel_folders_src = r"\\directory_of_folders_that_are_yet_to_exist\\"

def wait_for_reelfolders(folder_paths):
    # 记录已处理过的文件,避免重复操作
    processed_files = set()
    
    while True:
        print("监控文件夹中...")
        for folder_path in folder_paths:
            if os.path.exists(folder_path):
                for file_name in os.listdir(folder_path):
                    file_path = os.path.join(folder_path, file_name)
                    # 只处理文件,跳过子文件夹
                    if os.path.isfile(file_path):
                        if "_GOOD_" in file_name and file_path not in processed_files:
                            try:
                                os.remove(file_path)
                                print(f"已删除: {file_path}")
                                processed_files.add(file_path)
                            except PermissionError:
                                print(f"文件被占用,暂时无法删除: {file_path}")
                            except Exception as e:
                                print(f"删除出错: {file_path}, 原因: {str(e)}")
        # 根据机器生成速度调整间隔,越快间隔越小,别设为0以免占用过多CPU
        time.sleep(0.1)

# 用os.path.join拼接路径更规范
reel_folders = [
    os.path.join(reel_folders_src, "Reel2"),
    os.path.join(reel_folders_src, "Reel3"),
    os.path.join(reel_folders_src, "Reel4")
]

wait_for_reelfolders(reel_folders)

补充说明

  • processed_files集合用来避免重复尝试删除已删掉的文件,提升效率。
  • time.sleep(0.1)可以根据实际生成速度微调,比如生成极快的话可以改成0.05秒。
  • 错误处理确保单个文件删除失败不会影响整个监控流程,后续文件仍能被正常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:05:07