首页 > 解决方案 > 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)

但是文件数组总是空的,我认为是因为 glob 语法无效。

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

标签: python-2.7scriptingglobgimp

解决方案


所有 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','xcf','jpg','JPG','jpeg','gif','GIF']:
    for filename in glob.glob('*.'+ext):
        list.append(filename)

推荐阅读