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

Python读取桌面文件夹图片时触发FileNotFoundError的问题排查求助

Python读取桌面文件夹图片时触发FileNotFoundError的问题排查求助

兄弟,我一眼就瞅出你代码里的关键问题啦!你看报错里的路径是C:/Users/Administrator/Desktop/testclassB,明显是父文件夹路径和子文件夹名粘在一起了——因为你直接用folder + random.choice(os.listdir(folder))拼接路径,而你的folder末尾没有加路径分隔符(斜杠/),所以系统把test和classB直接拼成了一个不存在的名字,自然找不到啦!

给你几个解决步骤,亲测好用:

1. 用os.path.join()正确拼接路径

这是Python处理路径的标准姿势,它会自动根据你的操作系统添加正确的路径分隔符,完全避免手动拼接的错误。比如把你的路径拼接代码改成这样:

file_path = os.path.join(folder, random.choice(os.listdir(folder)))

2. 注意:os.listdir()返回的可能是子文件夹,不是直接的图片

你说test文件夹里有classA和classB,那os.listdir(folder)返回的是这两个文件夹名,不是里面的图片文件。所以你还得再进子文件夹里找图片才行,不然打开的是文件夹,肯定也会报错。我给你改好完整的代码:

import os
import random
from PIL import Image

def read_random_image():
    folder = r"C:/Users/Administrator/Desktop/test"
    # 先获取test文件夹下的所有子项(classA、classB)
    sub_folders = os.listdir(folder)
    # 随机选一个子文件夹
    target_folder = random.choice(sub_folders)
    # 拼接子文件夹的完整路径
    target_folder_path = os.path.join(folder, target_folder)
    # 筛选子文件夹里的图片文件(支持png/jpg/jpeg)
    image_files = [f for f in os.listdir(target_folder_path) 
                   if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
    if not image_files:
        raise ValueError(f"文件夹{target_folder}里没有找到图片文件")
    # 随机选一张图片,拼接完整路径
    random_image = random.choice(image_files)
    image_path = os.path.join(target_folder_path, random_image)
    # 打开图片
    pil_im = Image.open(image_path, "r")
    return pil_im

3. 额外排查小技巧

  • 调试的时候可以先打印生成的路径,比如在Image.open前加print(image_path),看看路径是不是你预期的样子
  • 确认test文件夹、classA/classB文件夹确实存在,而且里面有图片
  • 检查文件夹权限,确保你的Python程序有权限访问桌面的文件(一般桌面权限没问题,但有时候系统会有保护)

备注:内容来源于stack exchange,提问作者janko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:53:09