Python Glob递归地挖掘目录

2024-05-03 05:27:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前的目录结构如下:

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

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


Tags: 文件samplepathinimage目录txtfor
3条回答

考虑使用{a1}:

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

使用**/*作为模式:

>>> 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)供参考

相关问题 更多 >