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

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)

关键改动说明

  1. 提前创建output根目录:避免如果原output目录不存在时,根目录的PNG文件也报错。
  2. 针对每个目标文件,先获取它的父目录target_dir,然后用os.makedirs(target_dir, exist_ok=True)创建目录(如果已存在就跳过),这样shutil.move执行时,目标路径的父目录就一定存在了。

这样修改后,无论是根目录还是嵌套子目录里的PNG文件,都能被正确移动并保留原有的目录结构啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:02:40