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')
关键修改点说明
os.makedirs(target_directory, exist_ok=True):这个函数会递归创建所有需要的中间目录,exist_ok=True参数确保如果目录已经存在,不会抛出错误——完美适配你已经手动创建好目录的场景,同时也能覆盖你可能漏建的子目录。- 简化保存路径:原来的
'{}.tiff'.format(fn)完全没必要,因为fname已经是带.tiff扩展名的完整路径了,直接用fname作为保存路径更简洁,也避免了路径拼接时可能出现的错误。
额外排查建议
如果修改后还是报错,可以检查这两点:
- OneDrive同步状态:OneDrive有时候会有同步延迟,导致你手动创建的目录还没被系统完全识别。可以暂时关闭OneDrive同步,或者等目录完全同步后再运行代码。
- 路径分隔符一致性:尽量统一使用
/或者转义的\\,避免混合使用导致路径解析异常。
内容的提问来源于stack exchange,提问作者M Terry
相关产品推荐
相关产品推荐

