如何检查多个子目录是否包含.png文件?代码报错解决
解决方案
原代码的问题在于os.listdir()只会遍历指定目录下的直接子项(这里是0000、0001等子文件夹),不会递归进入子目录查找文件,所以永远匹配不到.png后缀的文件,导致img为空触发错误。同时原代码中路径拼接存在冗余:data_dir已经是/content/drive/MyDrive/Safe/training,再拼接training会生成错误路径/content/drive/MyDrive/Safe/training/training/image_03,这也是隐患之一。
下面提供两种可行的修改方式:
方法1:使用os.walk()递归遍历目录
os.walk()会自动遍历目标目录及其所有子目录,返回当前目录路径、子目录列表、文件列表,可针对性提取.png文件:
import os from PIL import Image import numpy as np data_dir = '/content/drive/MyDrive/Safe/training' img = [] # 递归遍历image_03下的所有子目录 for root, dirs, files in os.walk(os.path.join(data_dir, 'image_03')): for filename in files: if filename.endswith('.png'): img_path = os.path.join(root, filename) with Image.open(img_path) as image: img.append(np.array(image)) # 检查图片是否加载成功 if not img: raise ValueError("No images found in the directory")
方法2:使用pathlib(Python3.4+推荐)
pathlib提供了更简洁的面向对象式路径操作,rglob()方法可直接递归匹配指定后缀的文件:
from pathlib import Path from PIL import Image import numpy as np data_dir = Path('/content/drive/MyDrive/Safe/training') img = [] # 递归查找image_03下所有.png文件 for img_path in data_dir.joinpath('image_03').rglob('*.png'): with Image.open(img_path) as image: img.append(np.array(image)) # 检查图片是否加载成功 if not img: raise ValueError("No images found in the directory")
内容的提问来源于stack exchange,提问作者Rainbow
相关产品推荐
相关产品推荐

