使用os.walk转换PSD为JPG遇FileNotFoundError的解决求助
解决os.walk遍历子文件夹PSD文件时的FileNotFoundError问题
这个问题我之前处理过,核心原因很明确:你直接使用os.walk返回的文件名去打开文件,但这些文件名不包含子文件夹的路径,Python会默认在脚本所在的当前工作目录下查找,自然找不到藏在子文件夹里的PSD文件。
错误原因拆解
当你用os.walk('.')遍历的时候:
path变量是当前正在遍历的子文件夹的完整相对路径(比如./subfolder1)files变量是该子文件夹下的所有文件名(比如test02.psd)
如果直接用Image.open(file),相当于告诉Python去./test02.psd找文件,但实际它在./subfolder1/test02.psd,所以报错找不到。
解决方案:拼接完整文件路径
用os.path.join()函数把path和file拼接成完整的文件路径,这样Python就能准确定位到子文件夹里的PSD文件了。
修正后的完整代码示例
from PIL import Image import os # 遍历当前目录及所有子文件夹 for path, dirs, files in os.walk('.'): for file in files: # 只处理PSD文件(兼容大写后缀) if file.lower().endswith('.psd'): # 拼接完整的PSD文件路径 full_psd_path = os.path.join(path, file) try: # 打开PSD文件 with Image.open(full_psd_path) as img: # 生成JPG保存路径(和原PSD同文件夹,替换后缀) jpg_filename = os.path.splitext(file)[0] + '.jpg' full_jpg_path = os.path.join(path, jpg_filename) # 保存为JPG(PSD可能有透明通道,转RGB避免报错) img.convert('RGB').save(full_jpg_path, 'JPEG', quality=90) print(f"成功转换:{full_psd_path} -> {full_jpg_path}") except Exception as e: print(f"处理文件{full_psd_path}时出错:{str(e)}")
额外注意事项
- 用
file.lower().endswith('.psd')可以兼容.PSD大写后缀的情况 - PSD文件可能包含透明通道,直接保存JPG会报错,所以用
img.convert('RGB')转为RGB模式 - 加上
try-except块可以避免单个文件处理失败导致整个脚本终止 - 如果想把所有JPG统一保存到某个指定文件夹,可以修改
full_jpg_path为目标路径,比如os.path.join('./output_jpgs', jpg_filename)(记得先手动创建output_jpgs文件夹)
内容的提问来源于stack exchange,提问作者J.Shim
相关产品推荐
相关产品推荐

