如何遍历多个指定目录的文件?pathlib传多路径仅遍历第二个路径
问题原因
pathlib.Path构造方法传入多个位置参数时,作用是拼接路径片段,并非指定多个待遍历的根目录:
- 如果传入的后续路径是相对路径,会和前面的路径拼接成一个新的单一路径
- 如果传入的后续路径是绝对路径,会直接丢弃前面所有的路径片段,以最后一个绝对路径为准
你遇到的只遍历第二个路径的情况,就是因为传入参数时第二个路径被识别为绝对路径、覆盖了前一个路径,本质是用法错误,自然无法同时扫描两个目录。
正确实现方案
以下两种写法都可以精准遍历指定的两个文件夹,完全忽略其他无关目录与文件:
方案1:合并迭代器(推荐)
借助itertools.chain将两个目录的glob遍历结果合并为一个迭代器,单次循环即可处理所有匹配文件,代码简洁:
from pathlib import Path from itertools import chain root_dir_A = Path("dirA/subdirA/folder1") root_dir_B = Path("dirA/subdirA/folder2") for file in chain(root_dir_A.glob("**/*.json"), root_dir_B.glob("**/*.json")): with open(file, encoding="utf8") as json_data: # 写入你的json处理逻辑 ...
提示:使用
with上下文管理器打开文件会自动完成资源释放,避免文件句柄泄漏,比直接调用open()更稳妥。
方案2:遍历根路径列表
如果不想引入额外依赖,直接遍历存储目标根路径的列表即可,逻辑直白易读:
from pathlib import Path target_dirs = [ Path("dirA/subdirA/folder1"), Path("dirA/subdirA/folder2") ] for dir_path in target_dirs: for file in dir_path.glob("**/*.json"): with open(file, encoding="utf8") as json_data: # 写入你的json处理逻辑 ...
两种方案的遍历范围都被严格限定在你指定的两个文件夹内部,不会扫描上级目录中的其他无关内容,完全匹配需求。
内容的提问来源于stack exchange,提问作者Mitch
相关产品推荐
相关产品推荐

