遍历目录删除指定后缀文件、跳过被占用文件并导出记录到CSV的问题
问题根源
你之前的两段代码核心问题都是异常捕获的范围不对:
- 第一版把整个遍历逻辑包在try-except里,只要任意一个文件报错,整个遍历就会终止,直接进入pass逻辑
- 第二版没有加任何异常捕获,只要遇到被占用的文件就会直接抛出错误终止运行,而且会把所有匹配到的文件都写入CSV,不管有没有删除成功
调整后可运行的代码
import os import glob # 配置参数,可根据需求修改 SCAN_PATH = "//network_pc_name/c$/Users" # 扫描的网络路径,测试时可替换为你的测试路径 TARGET_EXT = (".ost", ".nst") # 要删除的文件后缀,测试时可换成(".xlsx", ".txt") OUTPUT_CSV = "deleted_files.csv" success_deleted = [] # 遍历所有匹配后缀的文件 for file_path in glob.glob(f"{SCAN_PATH}/**", recursive=True): if not file_path.endswith(TARGET_EXT): continue try: # 尝试删除文件 os.remove(file_path) # 删除成功才加入列表 success_deleted.append(file_path) except PermissionError: # 捕获文件被占用、无权限的错误,直接跳过 continue except OSError: # 其他系统级错误也跳过,避免崩溃 continue # 只把成功删除的文件路径写入CSV with open(OUTPUT_CSV, "w", encoding="utf-8") as f: # 不需要表头可以删掉下行 f.write("deleted_file_path\n") f.write("\n".join(success_deleted))
核心调整说明
- 异常捕获放在单个文件的删除逻辑内,单个文件删除失败不会影响其他文件的处理
- 单独维护
success_deleted列表,只有删除成功的文件路径才会被记录,CSV中不会出现未删除的文件路径 - 针对性捕获权限/占用相关的错误,不会吞掉所有异常,排查问题更方便
- 可直接修改顶部的配置参数适配测试、正式场景,不需要调整业务逻辑
内容的提问来源于stack exchange,提问作者Imraan Mhatey
相关产品推荐
相关产品推荐

