You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Path.iterdir()返回的路径调用rglob()扫描文件?

解决方法

核心错误原因

你的代码报错是因为Path.rglob('*.PNG')返回的是路径生成器(批量生成符合条件的Path对象),而不是单个路径,直接把生成器传给PurePath构造函数会触发类型错误。另外,主目录下存在zip文件(非目录项),遍历这些文件调用rglob也没有意义。

修正后的代码

以下是可以正常运行的代码,同时处理了zip文件过滤和生成器遍历的问题:

from pathlib import Path

# 挂载谷歌云盘
drive.mount('/content/drive')

# 定义根目录路径
root_dir = Path('/content/drive/MyDrive/Cape-Windy/Annotated-frames_COCO/')

# 遍历根目录下的所有子目录,跳过非目录文件(比如zip)
for sub_dir in root_dir.iterdir():
    # 只处理目录项
    if not sub_dir.is_dir():
        continue
    
    # 遍历当前子目录下所有PNG文件(包括子子目录中的)
    for png_path in sub_dir.rglob('*.PNG'):
        # 直接获取PNG文件的文件名(不带后缀)
        print(png_path.stem)

关键说明

  • sub_dir.is_dir():过滤掉根目录下的zip等非目录文件,只处理真正的子目录,避免无效遍历
  • sub_dir.rglob('*.PNG'):生成当前子目录下所有层级的PNG文件路径,必须通过循环逐个取出路径对象
  • png_path.stem:每个Path实例自带stem属性,直接获取文件名(无需额外用PurePath包装,因为rglob返回的已经是Path对象)

简化写法

如果不需要单独处理每个子目录,也可以直接在根目录用rglob批量匹配子目录下的PNG:

root_dir = Path('/content/drive/MyDrive/Cape-Windy/Annotated-frames_COCO/')
# 匹配所有子目录下的PNG文件(排除根目录直接存放的PNG)
for png_path in root_dir.rglob('*/**.PNG'):
    print(png_path.stem)

内容的提问来源于stack exchange,提问作者Observarun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:35:19