【问题标题】:python glob exclude pattern in the file name文件名中的python glob排除模式
【发布时间】:2020-03-24 07:49:03
【问题描述】:

这应该很简单,但我无法让它工作。 我想通过在 python 中使用 glob.glob 排除包含特定模式的文件来列出目录中的文件。

我的目录中的文件是:

lh.Hip.nii, lh.IPL.nii, lh.LTC.nii, rh.Hip.nii, rh.IPL.nii, rh.LTC.nii

我想通过排除文件名中包含“Hip”的文件来列出文件:

lh.IPL.nii, lh.LTC.nii, rh.IPL.nii, rh.LTC.nii

有一个类似的问题glob exclude pattern 并且该解决方案仅在我想排除以某种模式开头的文件时才有效,但在我的情况下它不起作用。

有什么想法吗?

【问题讨论】:

  • 请发布您的代码
  • 欢迎来到 *!请阅读如何提供MCVE

标签: python glob


【解决方案1】:

您可以使用glob 获取所有文件名,然后使用列表解析过滤它们,如下所示:

[i for i in glob("*.nii") if i.split('.')[1] != 'Hip']

【讨论】:

  • 非常感谢。这可行,现在我将使用此解决方案。我仍然想知道是否有一个全局通配符来执行此排除。
  • @IlkayIsik 我阅读了您提到的链接中的 cmets,其中大多数人说glob 过滤器主要用于简单包含而不是排除。我也尝试了一些模式,但没有一个有效
【解决方案2】:

试试这个:

result = []
files = glob.glob('*')
for f in files : 
    if 'Hip' not in f : 
        result.append(f)

你的结果是:['lh.IPL.nii', 'lh.LTC.nii', 'rh.IPL.nii', 'rh.LTC.nii']

【讨论】: