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

Python处理嵌套目录图片并保存至同结构目录报错求助

解决嵌套目录图片批量处理时的FileNotFoundError问题

看起来你已经手动搭好了和原目录一致的目标结构,但还是碰到了保存失败的问题——这种情况我也遇到过,大概率是代码在保存图片时,没有自动确保目标文件的父目录能被系统正确识别(哪怕你手动创建了目录,也可能因为拼写失误、OneDrive同步延迟或者路径解析的小问题导致识别失败)。

先看你的报错:系统找不到D:\\Users\\mbeng\\OneDrive\\Desktop\\resized2\\test\\map\\22828930_15.tiff这个路径,虽然你说resized2/test/map已经存在,但Python写入文件时会严格校验整个路径的有效性,哪怕中间某一层目录有细微异常,都会抛出这个错误。

解决方案:保存前自动创建目标目录

最稳妥的办法是让代码在保存图片前,自动检查并创建所需的所有父目录,这样不管是手动漏建了目录,还是同步问题,都能被覆盖。

修改你的代码如下:

import os
from PIL import Image
import fnmatch

root_path= 'D:/Users/mbeng/OneDrive/Desktop/mass_buildings'

def locate(pattern, root_path):
    for path, dirs, files in os.walk(os.path.abspath(root_path)):
        for filename in fnmatch.filter(files, pattern):
            yield os.path.join(path, filename)

path = [f for f in locate('*.tiff', root_path)]

for file in path:
    i = Image.open(file)
    # 替换原路径为目标保存路径
    fname = file.replace('D:\\Users\\mbeng\\OneDrive\\Desktop\\mass_buildings', 
                        'D:\\Users\\mbeng\\OneDrive\\Desktop\\resized2')
    # 提取目标文件所在的父目录
    target_directory = os.path.dirname(fname)
    # 递归创建父目录(如果不存在则创建,已存在则跳过)
    os.makedirs(target_directory, exist_ok=True)
    # 调整图片尺寸
    img = i.resize((300, 300))
    # 直接保存到目标路径
    img.save(fname, 'TIFF')

关键修改点说明

  1. os.makedirs(target_directory, exist_ok=True):这个函数会递归创建所有需要的中间目录,exist_ok=True参数确保如果目录已经存在,不会抛出错误——完美适配你已经手动创建好目录的场景,同时也能覆盖你可能漏建的子目录。
  2. 简化保存路径:原来的'{}.tiff'.format(fn)完全没必要,因为fname已经是带.tiff扩展名的完整路径了,直接用fname作为保存路径更简洁,也避免了路径拼接时可能出现的错误。

额外排查建议

如果修改后还是报错,可以检查这两点:

  • OneDrive同步状态:OneDrive有时候会有同步延迟,导致你手动创建的目录还没被系统完全识别。可以暂时关闭OneDrive同步,或者等目录完全同步后再运行代码。
  • 路径分隔符一致性:尽量统一使用/或者转义的\\,避免混合使用导致路径解析异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:14:09