如何评估路径中的双星号(星形)



路径中的任何双星号都表示所有子目录。

现在,如果我有一个像这样的路径a/b/c/**/*.txt,这意味着我需要c下所有子目录下的所有文件。如何在python中获得它?

让我们考虑一个例子。考虑一个包含以下文件的目录:1.gif、2.txt、card.gif和一个仅包含文件3.txt的子目录。

更新:

pathlib现在为大多数常见的路径操作提供了一个令人惊叹的接口。这个任务也可以通过pathlib完成,如下所示:

from pathlib import Path
path = Path(r".") # path to the root dir from where you want to start searching
list(path.glob("**/*.txt"))
Out[1]: [WindowsPath('2.txt'), WindowsPath('sub/3.txt')]

有关较旧的答案,请参阅下面的


使用glob。

来自文档:

glob((将产生以下结果。请注意路径的任何前导组件是如何保留的。

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
>>> glob.glob('**/*.txt', recursive=True) #python 3.5+
['2.txt', 'sub/3.txt']
>>> glob.glob('./**/', recursive=True)
['./', './sub/']

对于python<3.5

对于较旧的Python版本,使用os.walk递归遍历目录,使用fnmatch.filter匹配一个简单的表达式:

import fnmatch
import os
matches = []
for root, dirnames, filenames in os.walk('src'):
for filename in fnmatch.filter(filenames, '*.txt'):
matches.append(os.path.join(root, filename))

相关内容

  • 没有找到相关文章

最新更新