如何在 python 中实现 ant 风格的模式集来选择文件组?

izb*_*izb 3 python ant file

Ant 有一个很好的方法来选择文件组,最方便地使用 ** 来指示目录树。例如

**/CVS/*            # All files immediately under a CVS directory.
mydir/mysubdir/**   # All files recursively under mysubdir
Run Code Online (Sandbox Code Playgroud)

更多示例可以在这里查看:

http://ant.apache.org/manual/dirtasks.html

你会如何在 python 中实现这个,这样你就可以做类似的事情:

files = get_files("**/CVS/*")
for file in files:
    print file

=>
CVS/Repository
mydir/mysubdir/CVS/Entries
mydir/mysubdir/foo/bar/CVS/Entries
Run Code Online (Sandbox Code Playgroud)

And*_*ock 5

抱歉,距离你的手术已经过去很长时间了。我刚刚发布了一个 Python 包,它就是这样做的——它被称为 Formic,可以在PyPI Cheeseshop上找到。使用 Formic,您的问题可以通过以下方式解决:

import formic
fileset = formic.FileSet(include="**/CVS/*", default_excludes=False)
for file_name in fileset.qualified_files():
    print file_name
Run Code Online (Sandbox Code Playgroud)

有一个稍微复杂的地方:default_excludes。Formic,就像 Ant 一样,默认排除 CVS 目录(因为在构建过程中从其中收集文件的大部分是危险的),问题的默认答案将导致没有文件。设置 default_excludes=False 会禁用此行为。