Python 目录中和目录下的文件的Glob
我知道我可以通过Python 目录中和目录下的文件的Glob,python,glob,Python,Glob,我知道我可以通过glob.glob(“dir/*”)获取目录的即时内容。我还可以使用类似于glob.glob(“dir/***”)的方法反复获取子目录的所有内容,但这不会包含dir/的直接内容。有没有什么全球模式可以让我把两者结合起来;dir/中的所有内容都是递归的吗 编辑: 如果我在这里太难了,我正在编写一个setup.py脚本,希望将整个目录作为package\u data包含在内。我目前正在做package_data=[“resources/*”,“resources/****”],但这对
glob.glob(“dir/*”)
获取目录的即时内容。我还可以使用类似于glob.glob(“dir/***”)的方法反复获取子目录的所有内容,但这不会包含dir/
的直接内容。有没有什么全球模式可以让我把两者结合起来;dir/
中的所有内容都是递归的吗
编辑:
如果我在这里太难了,我正在编写一个setup.py
脚本,希望将整个目录作为package\u data
包含在内。我目前正在做package_data=[“resources/*”,“resources/****”]
,但这对我来说似乎有点奇怪…你glob
模式dir/***
可以递归地匹配dir
目录和子目录下的文件;您需要传入recursive=True
命名参数:
glob.glob('dir/**/*', recursive=True)
问题是,如果没有recursive=True
,glob
将把**
(递归glob)模式视为通常的*
(零个或多个字符),并将匹配目录下的任何文件。当您传递参数时,**
将被特殊处理,即作为递归全局模式
此外,如果您的目的只是迭代文件,最好使用iglob
获取迭代器,而不是列表:
glob.iglob('dir/**/*', recursive=True)
有趣!recursive=True
参数确实引入了dir/
的内容,但是它的行为对于dir/***
案例来说似乎很奇怪glob(“dir/**”,recursive=True)
似乎是最自然的(也很有效)。无论哪种方式,这都在setup.py
中用于指定package\u data
,因此我无法准确地传递recursive
参数。@youngmit您的最终计划是什么?你想要什么文件?在dir
和一些子目录(它们的名字是什么)下,我有一个名为resources/
的目录。我想要它的全部内容。现在我正在做package_data=[“resources/*”,“resources/****”]
,但这似乎是unnatural@youngmit检查此项:将递归的glob
放入package\u文件中
func。