[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.

上一篇 下一篇

猜你喜欢

热点阅读