删除目录中10分钟以上旧文件脚本报错求助(附代码)
问题分析与脚本修复
原脚本的核心错误
- 路径赋值错误:
file_path = os.path.isfile(os.path.join(...))这行将布尔值(判断是否为文件的结果)赋值给了file_path,后续调用os.path.getctime(file_path)时,传入布尔值会直接触发参数错误,因为该函数需要有效的文件路径。 - 日志格式化错误:
log_entry = {time.ctime(creation_time)} - {file}使用了集合语法,会导致语法错误,正确的做法是用字符串格式化拼接日志内容。 - 未过滤子目录:原脚本没有判断遍历对象是否为文件,会将子目录纳入处理,导致后续操作报错。
修复后的完整脚本
import os import time trigger_file_dir = "/appl/wsl/itws/test" log_file_path = "/appl/wsl/itws/stale_files.log" current_time = time.time() # 10分钟对应的秒数 stale_threshold = 60 * 10 # 遍历目标目录下的所有条目 for file_name in os.listdir(trigger_file_dir): # 拼接完整的文件路径 full_file_path = os.path.join(trigger_file_dir, file_name) # 跳过子目录,只处理文件 if not os.path.isfile(full_file_path): continue # 获取文件创建时间(注:Unix系统下ctime是文件状态最后变更时间,Windows是创建时间;若需Unix下严格创建时间,可改用os.stat(full_file_path).st_birthtime,部分旧Linux系统不支持) creation_time = os.path.getctime(full_file_path) # 判断文件是否超过10分钟未更新/创建 if current_time - creation_time > stale_threshold: # 格式化日志内容,添加换行符保证日志可读性 log_entry = f"{time.ctime(creation_time)} - {file_name}\n" # 写入日志文件 with open(log_file_path, "a") as log_file: log_file.write(log_entry) # 删除目标文件 os.remove(full_file_path)
额外说明
- 创建时间兼容性:如果你的运行环境是Unix/Linux,且需要严格获取文件的创建时间而非状态变更时间,可以将
creation_time的获取代码替换为:
注意部分旧版本Linux系统可能不支持creation_time = os.stat(full_file_path).st_birthtimest_birthtime属性,需根据实际环境调整。 - 异常处理建议:生产环境使用时,建议添加异常捕获逻辑,处理文件删除时可能出现的权限不足、文件被占用等情况,避免脚本中断,示例如下:
try: os.remove(full_file_path) except Exception as e: # 可将错误信息写入日志 error_log = f"Failed to delete {file_name}: {str(e)}\n" with open(log_file_path, "a") as log_file: log_file.write(error_log)
内容的提问来源于stack exchange,提问作者shubi naidu
相关产品推荐
相关产品推荐

