JupyterLab读取嵌套目录图片时提示路径不存在的问题求助
解决PetImages数据集图片读取失败的问题
你的代码直接读取PetImages文件夹,但这个文件夹下只有Dog和Cat两个子文件夹,并没有图片文件。os.listdir()会列出这两个子文件夹,cv2.imread()尝试读取目录而非图片文件,就会触发“文件或目录不存在”的错误;另外Kaggle的这个数据集本身存在部分损坏的图片文件,也会导致读取失败。
方案1:递归遍历所有子文件夹
使用os.walk()递归遍历PetImages下的所有子文件夹,自动读取里面的图片,同时跳过无法读取的文件并打印提示:
import cv2 import os def load_images_from_folder(root_folder): images = [] for root, dirs, files in os.walk(root_folder): for filename in files: file_path = os.path.join(root, filename) # 先校验是否为文件,避免读取目录 if os.path.isfile(file_path): img = cv2.imread(file_path) if img is not None: images.append(img) else: print(f"无法读取图片: {file_path}") return images # 用原始字符串避免转义问题 folder_path = r'C:/Users/1234/Downloads/kaggle/PetImages' images = load_images_from_folder(folder_path)
方案2:手动指定子文件夹
如果不需要递归,也可以直接指定Dog和Cat文件夹分别读取:
import cv2 import os def load_images_from_folder(foldername): images = [] for filename in os.listdir(foldername): file_path = os.path.join(foldername, filename) if os.path.isfile(file_path): img = cv2.imread(file_path) if img is not None: images.append(img) else: print(f"无法读取图片: {file_path}") return images folder_path = r'C:/Users/1234/Downloads/kaggle/PetImages' dog_images = load_images_from_folder(os.path.join(folder_path, 'Dog')) cat_images = load_images_from_folder(os.path.join(folder_path, 'Cat')) all_images = dog_images + cat_images
额外排查点
- 校验路径有效性:打印
print(os.path.exists(folder_path)),如果返回False,说明路径拼写错误,检查用户名、文件夹名称是否正确(注意大小写)。 - 检查文件权限:确保当前用户拥有该文件夹的读取权限。
- 处理损坏文件:运行代码后,打印出的“无法读取图片”路径对应的文件是损坏的,可直接删除这些文件避免后续报错。
内容的提问来源于stack exchange,提问作者regina
相关产品推荐
相关产品推荐

