[Python]递归查找文件(最简洁)
2020-07-22 本文已影响0人
培根炒蛋
google了一下发现大多数人都是自己实现的,其实python标准库里是有相关方法的,更简洁,而且支持pattern匹配。
其实自己实现也没多难,但是一个非常重要的经验告诉我,内置方法哪怕代码跟你的一模一样都会比你自己写的快很多,所以当你想要一个功能的时候,最好先查一下标准库里有没有,或者有没有其他人已经做过的,而不是上来就去自己实现,不一定有人家写的好不说,效率还不高。
Path.glob(pattern)
解析相对于此路径的通配符 pattern,产生所有匹配的文件:
>>> sorted(Path('.').glob('*.py'))
[PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
>>> sorted(Path('.').glob('*/*.py'))
[PosixPath('docs/conf.py')]
**
模式表示 “此目录以及所有子目录,递归”。换句话说,它启用递归通配:
>>> sorted(Path('.').glob('**/*.py'))
[PosixPath('build/lib/pathlib.py'),
PosixPath('docs/conf.py'),
PosixPath('pathlib.py'),
PosixPath('setup.py'),
PosixPath('test_pathlib.py')]
注解:在一个较大的目录树中使用
**
模式可能会消耗非常多的时间。
Path.rglob(pattern)
这就像调用 Path.glob
时在给定的相对 pattern
前面添加了**/
>>> sorted(Path().rglob("*.py"))
[PosixPath('build/lib/pathlib.py'),
PosixPath('docs/conf.py'),
PosixPath('pathlib.py'),
PosixPath('setup.py'),
PosixPath('test_pathlib.py')]
Nice and easy.