如何使用Python读取指定文件夹下的图片文件名并逐张加载?
文件夹图片遍历读取方案
你原有代码存在3个问题,修正后即可实现和文本逐行读取一致的遍历效果:
- 缩进不规范,Python对代码缩进有严格语法要求,循环体前不能有多余前置空格
- 后缀匹配规则错误,原有代码写的
*.img无法匹配.png格式的图片 - 缺少路径合法性校验,可能把同名文件夹误识别为图片文件导致报错
方案1:基于你原有glob写法修正(最贴近你当前的代码习惯)
这个方案的逻辑和open().read().splitlines()完全对齐:先一次性拿到所有目标图片的路径列表(等价于splitlines返回的行内容列表),再逐张加载/处理即可。
from PIL import Image import glob import os # 替换为你的实际文件夹路径,比如"./my_images"代表当前脚本目录下的my_images文件夹 target_folder = "yourpath" # 第一步:拿到所有png格式图片的完整路径,这一步等价于splitlines()拿到所有行的结果 image_paths = glob.glob(os.path.join(target_folder, "*.png")) # 第二步:逐张加载图片,存入列表 image_objects = [] for path in image_paths: # 过滤掉命中后缀规则的文件夹,避免报错 if os.path.isfile(path): img = Image.open(path) # 如果需要提前把图片数据加载到内存,可以放开下面这行 # img.load() image_objects.append(img)
如果需要同时匹配jpg、jpeg、bmp等其他常见图片格式,替换路径匹配部分的代码即可:
# 定义需要匹配的图片后缀 support_exts = ("*.png", "*.jpg", "*.jpeg", "*.bmp") image_paths = [] for ext in support_exts: image_paths.extend(glob.glob(os.path.join(target_folder, ext)))
如果需要递归读取所有子文件夹里的图片,把glob规则改成带**的通配符,开启递归参数即可:
image_paths = glob.glob(os.path.join(target_folder, "**/*.png"), recursive=True)
方案2:基于os.listdir实现(无额外依赖,逻辑更直观)
如果不想用glob库,用Python内置的os模块遍历也可以实现同样效果:
from PIL import Image import os target_folder = "yourpath" image_paths = [] image_objects = [] for filename in os.listdir(target_folder): # 不区分大小写匹配png后缀,比如.PNG结尾的文件也能识别 if filename.lower().endswith(".png"): full_path = os.path.join(target_folder, filename) if os.path.isfile(full_path): image_paths.append(full_path) # 需要直接加载图片对象就放开下面两行 # img = Image.open(full_path) # image_objects.append(img)
逻辑对应说明
和你熟悉的文本读取逻辑完全一一对应:
| 文本读取流程 | 图片读取流程 |
|---|---|
open("data.txt", "r") | 指定目标文件夹路径 |
read().splitlines() | 匹配筛选得到所有图片路径列表 |
| 遍历列表逐行处理文本内容 | 遍历列表逐张加载/处理图片 |
内容的提问来源于stack exchange,提问作者M A Nezam Sagor
相关产品推荐
相关产品推荐

