Python用Path.rglob列JPG图片 传入路径变量返回空列表如何解决
问题原因
两种写法逻辑本身完全等价,出现返回结果差异的核心原因是image_path变量的实际值和你硬编码的路径不一致,常见场景如下:
- 路径字符串首尾存在多余的空格、换行符或其他不可见字符,通常出现在路径从配置文件、用户输入、第三方接口读取的场景
- 反斜杠转义错误:如果实际赋值时没有写双反斜杠,也没有声明原始字符串,比如写成
image_path = 'X:\path\to\directory',\t、\p等组合会被识别为转义字符,导致最终生成的路径和预期完全不符 - 路径指向的目录不存在,或是当前运行的程序没有该目录的读取权限
解决方案
- 先校验路径有效性,在读取图片前添加校验代码定位问题:
from pathlib import Path image_path = 'X:\\path\\to\\directory' # repr会打印字符串的原始表示,可直接看到不可见字符、转义是否正确 print(f"路径原始值:{repr(image_path)}") target_dir = Path(image_path) print(f"路径是否存在:{target_dir.exists()}") print(f"路径是否为目录:{target_dir.is_dir()}")
如果校验结果和预期不符,直接修正路径赋值逻辑即可。
2. 路径字符串推荐使用原始字符串写法,避免转义错误:
# 加r前缀声明原始字符串,不需要手动转义反斜杠,出错概率更低 image_path = r'X:\path\to\directory' jpgs = list(Path(image_path).rglob("*.[jJ][pP][gG]"))
- 若确认路径有效仍返回空,可先打印目录下的所有文件排查匹配规则问题:
for file in Path(image_path).iterdir(): print(file)
如果你使用的是Python 3.11及以上版本,还可以用更简洁的大小写不敏感匹配写法:
jpgs = list(Path(image_path).rglob("*.jpg", case_sensitive=False))
内容的提问来源于stack exchange,提问作者Spatial Digger
相关产品推荐
相关产品推荐

