美文网首页
[Python]递归查找文件(最简洁)

[Python]递归查找文件(最简洁)

作者: 培根炒蛋 | 来源:发表于2020-07-22 14:10 被阅读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.

    相关文章

      网友评论

          本文标题:[Python]递归查找文件(最简洁)

          本文链接:https://www.haomeiwen.com/subject/ctnzkktx.html