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('*/'):

这确实给了我所要的内容,但是嵌套递归不起作用,只是给了我顶层目录。

解决方法

使用 **/* 作为模式:

>>> 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('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('dir1/file10.txt')]

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

,

考虑使用os.walk

import os

all_files = []

for root,subdirs,files in os.walk("/Users/user/dir"):
    all_files += [os.path.join(root,file) for file in files]

print(all_files)
,

您可以使用路径的rglob() method

for path in Path('/Users/user/dir').rglob('*'):
    if path.is_file():
        print(path)

如果仅需要带有某种后缀的文件,请使用.rglob('*.*')