Python实现文件夹文件清理报错求助:超5个或超5天文件删除失败
问题解决与功能实现
先解决报错问题
你遇到的FileNotFoundError是因为os.listdir(path_file)返回的只是文件名,不是完整文件路径。直接用os.remove(file)时,Python会在当前脚本的工作目录下去找这个文件,而不是你指定的path_file文件夹里,自然找不到。
修正方法很简单:把文件夹路径和文件名拼接成完整路径,用os.path.join()来做:
import os path_file = r'C:\...\new folder' files = os.listdir(path_file) for file in files[:5]: # 拼接完整路径 full_file_path = os.path.join(path_file, file) # 先判断是不是文件,避免误删文件夹 if os.path.isfile(full_file_path): os.remove(full_file_path)
实现完整需求:数量达标或超时自动删除
下面是满足你两个条件的完整代码:当文件数量≥5时删除最早的多余文件;同时删除所有存在时间超过5天的文件。
import os import time # 目标文件夹路径 target_folder = r'C:\...\new folder' # 5天对应的秒数(1天=86400秒) FIVE_DAYS = 5 * 24 * 60 * 60 def clean_files(): # 获取文件夹内所有文件的完整路径,排除子文件夹 all_files = [] for filename in os.listdir(target_folder): full_path = os.path.join(target_folder, filename) if os.path.isfile(full_path): all_files.append(full_path) # 1. 处理文件数量超过5个的情况:删除最早创建的多余文件 if len(all_files) > 5: # 按文件最后修改时间排序(Windows用getctime,Linux/macOS用getbirthtime) # 这里用getmtime(最后修改时间)兼容性更好 all_files.sort(key=lambda x: os.path.getmtime(x)) # 计算需要删除的数量:总数量-5 num_to_delete = len(all_files) - 5 for file_path in all_files[:num_to_delete]: try: os.remove(file_path) print(f"删除文件(数量超限):{file_path}") except Exception as e: print(f"删除失败 {file_path}: {e}") # 2. 处理存在时间超过5天的文件 current_time = time.time() for file_path in all_files: # 获取文件最后修改时间的时间戳 file_mtime = os.path.getmtime(file_path) if current_time - file_mtime > FIVE_DAYS: try: os.remove(file_path) print(f"删除文件(超时):{file_path}") except Exception as e: print(f"删除失败 {file_path}: {e}") if __name__ == "__main__": clean_files()
代码说明
- 路径拼接:始终用
os.path.join()处理路径,避免Windows和Linux路径分隔符的问题。 - 文件判断:用
os.path.isfile()确保只处理文件,不会误删子文件夹。 - 排序逻辑:按文件最后修改时间排序,优先删除最早的文件,你也可以改成
os.path.getctime()(创建时间),根据需求调整。 - 异常处理:用
try-except捕获删除时的异常(比如文件被占用、权限不足),避免脚本崩溃。 - 时间计算:把5天转换成秒数,和文件时间戳做差值比较,判断是否超时。
内容的提问来源于stack exchange,提问作者ivonne
相关产品推荐
相关产品推荐

