Python使用os、glob读取文件夹图片时报错/返回空列表如何解决?
问题根因与解决方案
- 所有报错核心都是路径拼接错误和glob语法错误,不存在库本身的问题
os.listdir仅返回目标文件夹下的文件/文件夹名称,不包含父级路径,直接读取文件名会默认在当前脚本工作目录查找,自然找不到文件- glob路径中你错误使用了逗号分隔文件夹和后缀匹配规则,正确语法是用路径分隔符(
/或\\) - 用path1遍历时报错找不到
C,是因为你直接把路径字符串当成可迭代对象循环了,每次取单个字符,第一个字符就是C - 你给出的OpenCV测试代码还存在逻辑错误:未给
image_list赋值就直接遍历,自然不会执行循环内的显示逻辑
正确实现代码
方法1:使用os模块实现
import os from PIL import Image import cv2 # 目标文件夹路径(建议用绝对路径避免工作目录变动问题) img_dir = r'C:\Users\Kays_\PycharmProjects\CompVisionExam\Calibration_images' # 也可以用相对路径:img_dir = 'Calibration_images' image_list = [] for filename in os.listdir(img_dir): # 重点:拼接父级路径和文件名,得到完整路径 full_path = os.path.join(img_dir, filename) # 过滤非jpg文件,避免误读文件夹/其他格式文件 if not filename.lower().endswith('.jpg'): continue # PIL读取 im = Image.open(full_path) image_list.append(im) # 如需OpenCV读取显示,替换为以下代码 # img = cv2.imread(full_path) # cv2.imshow('img', img) # cv2.waitKey(1000) # 关闭所有OpenCV窗口(如果用了OpenCV显示的话) # cv2.destroyAllWindows() print(image_list)
方法2:使用glob模块实现
import glob from PIL import Image import cv2 # 正确glob路径:用*匹配所有jpg文件,路径分隔符用/或者\\,不要用逗号 img_paths = glob.glob(r'C:\Users\Kays_\Documents\Exam_for_27\Dataset\Calibration_images\*.jpg') # 工作目录下的路径也可以写:glob.glob(r'Calibration_images\*.jpg') image_list = [] for full_path in img_paths: im = Image.open(full_path) image_list.append(im) # OpenCV显示逻辑同上 # img = cv2.imread(full_path) # cv2.imshow('img', img) # cv2.waitKey(1000) # cv2.destroyAllWindows() print(image_list)
注意事项
- OpenCV读取图片后如果直接结束进程,窗口会一闪而过,测试时可以最后加一行
cv2.waitKey(0)等待用户按键后再关闭所有窗口 - 如果确认路径正确还是读不到,先打印
full_path变量,复制路径到资源管理器地址栏,确认可以直接打开对应图片
内容的提问来源于stack exchange,提问作者Rekkus
相关产品推荐
相关产品推荐

