首页 > 解决方案 > Python - Glob 递归地挖掘目录

问题描述

我目前的目录结构如下:

/Users/user/dir/image.png
/Users/user/dir/sample.txt
/Users/user/dir/nested_dir/dir/dir/file.txt
/Users/user/dir/nested_dir1/dir2/dir3/file2.txt

我的目标是递归地挖掘每个目录,以获取我需要的特定文件。问题是我还想在执行递归搜索的同时捕获“image.png”以及任何其他不是目录的文件类型。

这是我目前拥有的:

for file in Path('/Users/user/dir').glob('**/'):
        print(f'file:{file}')

然后,这会一直生成每个文件和文件夹,但是不显示不是目录的项目(image.py,sample.txt)。我也想捕捉这些以备后用。建议?

此外,我尝试了以下方法:

for file in Path('/Users/user/dir').glob('*/'):

这确实给了我我要求的项目,但是嵌套递归不起作用,只是给了我顶级目录。

标签: pythonglob

解决方案


用作**/*模式:

>>> from pprint import pprint as pp
>>> import pathlib as pl
>>>
>>>
>>> p = pl.Path(".")
>>>
>>> old_way = list(p.glob("**/"))  # Your way
>>> pp(old_way)
[WindowsPath('.'),
 WindowsPath('dir0'),
 WindowsPath('dir1'),
 WindowsPath('dir1/dir10')]
>>>
>>> new_way = list(p.glob("**/*"))
>>> pp(new_way)
[WindowsPath('dir0'),
 WindowsPath('dir1'),
 WindowsPath('file0.txt'),
 WindowsPath('dir0/file00.txt'),
 WindowsPath('dir1/dir10'),
 WindowsPath('dir1/file10.txt')]
>>>
>>> newer_way = [p] + list(p.glob("**/*"))  # Prepend globed dir
>>> pp(newer_way)
[WindowsPath('.'),
 WindowsPath('dir0'),
 WindowsPath('dir1'),
 WindowsPath('file0.txt'),
 WindowsPath('dir0/file00.txt'),
 WindowsPath('dir1/dir10'),
 WindowsPath('dir1/file10.txt')]

这是[Python.Docs]: pathlib - Path.glob(pattern)供参考。


推荐阅读