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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:18:08