Python移动指定类型文件并保留目录结构时报错的解决方案求助
问题分析与解决思路
我来帮你拆解下这个问题~你遇到的报错核心原因是:shutil.move 并不会自动创建目标路径中不存在的父目录。
当你移动根目录下的PNG文件时,output目录已经存在(如果不存在的话其实根目录的文件也会报错),所以直接移动没问题;但当处理子目录(比如subfolder_1)里的第一个PNG文件时,output/subfolder_1这个目录还没被创建,shutil.move找不到这个路径,就会抛出“目标文件不存在”的错误。
解决办法
只需要在移动文件前,先检查并创建目标文件所在的父目录即可。可以用os.makedirs()来完成这个操作,加上exist_ok=True参数可以避免目录已存在时的报错。
修改后的完整代码
import os import shutil input_folder_name = "input" input_path = os.path.join(os.getcwd(), input_folder_name) output_folder_name = "output" output_path = os.path.join(os.getcwd(), output_folder_name) # 先确保output根目录存在 os.makedirs(output_path, exist_ok=True) for root, dirs, files in os.walk(input_path): for file in files: if file.endswith(".png"): file_source_path = os.path.join(root, file) file_output_path = file_source_path.replace(input_folder_name, output_folder_name) # 获取目标文件的父目录路径 target_dir = os.path.dirname(file_output_path) # 创建父目录(如果不存在) os.makedirs(target_dir, exist_ok=True) print("input:", file_source_path) print("output:", file_output_path) shutil.move(file_source_path, file_output_path)
关键改动说明
- 提前创建
output根目录:避免如果原output目录不存在时,根目录的PNG文件也报错。 - 针对每个目标文件,先获取它的父目录
target_dir,然后用os.makedirs(target_dir, exist_ok=True)创建目录(如果已存在就跳过),这样shutil.move执行时,目标路径的父目录就一定存在了。
这样修改后,无论是根目录还是嵌套子目录里的PNG文件,都能被正确移动并保留原有的目录结构啦~
内容的提问来源于stack exchange,提问作者typopaul
相关产品推荐
相关产品推荐

