GIMP script-fu,“file-glob”可以只返回具有特定扩展名的文件吗?

问题描述

我正在尝试在 GIMP 中使用 python-fu。我希望 pdb.file_glob 以我指定的格式返回一组图像文件。我试过了:

myGlob = "*.png|*.PNG|*.jpg|*.JPG|*.gif|*.GIF|*.xcf|*.XCF"
globpath = os.path.join(patternDir,myGlob)
num_files,files = pdb.file_glob(globpath,0)

但是 files 数组总是空的,我假设是因为 glob 语法无效。

请注意,如果我使用 myGlob="*",我会得到我想要的图形文件,但也会得到诸如“fake.txt”之类的文件,我想排除这些文件

解决方法

所有 PDB 函数的文档都可以通过 Python-fu 控制台找到。点击 Browse... 按钮,然后在左窗格顶部的过滤器栏中输入您的搜索。这个文档是动态的,它包括任何可调用的插件/脚本的文档(当然只要作者写了一些)

Python 的 PDB 函数是 script-fu API 的直接映射。在这种特定情况下,file_glob() 最近被添加到 script-fu API 中,因为基本 TinyScheme 语言中没有任何内容可以做到这一点。在 Python 中,最好使用标准 Python API,os.walk()glob.glob()/glob.iglob()

在任何情况下,这些函数都只做简单的模式匹配,如果你想要几个扩展,你需要这样的东西:

sorted([filename for ext in ['XCF','xcf','jpg','JPG','jpeg','gif','GIF'] for filename in glob.glob('*.'+ext)])

编辑:这是一个“理解”,或多或少是一个带有外部指令的循环。你可以把它读成:

files=[]
for ext in ['XCF','GIF']:
    for filename in glob.glob('*.'+ext):
        list.append(filename)