【发布时间】:2015-07-14 13:34:46
【问题描述】:
Python 的 glob 模块允许指定通配符来列出文件,而且获取文件非常实用。
但是如何获取/重建通配符匹配的值?
例如,假设我有这 8 个文件:fa1 fa2 fa3 fb1 fb3 fc1 fc2 fc3(注意:fb2 缺失)。
我可以的
import glob
glob.glob('f[ab][12]') # ['fa2', 'fb1', 'fa1']
在这种情况下,我有 2 个通配符:[ab] 和 [12]。它们中的每一个都匹配值a、b 和1 和2,但是这些值的组合只出现了3 个,因为一个文件fb2(通配符的有效组合)不存在.
问题:如何获取每个通配符的有效匹配值列表?更准确地说:如何获取与实际存在的文件匹配的(字符串)值的元组列表?
在我的示例中,我想获取元组列表:[('a', '2'), ('b', '1'), ('a', '1')]。
注意:
- 我不想获取全名,只获取通配符匹配的值(在我的示例中,前缀
'f'不是通配符的一部分,因此我不想在元组列表中获取它); - 这必须适用于所有受支持的通配符,包括 * 和 ?。
我能想到的唯一解决方案是使用正则表达式,但这基本上意味着重新实现整个 glob 机制以提取中间数据。
编辑
由于“过于宽泛”的问题 (???) 我得到了一个接近的建议,我将问题重新表述为:是否可以使用 glob/fnmatch 模块而不是直接使用正则表达式来获得该结果?
【问题讨论】:
-
我很好奇你为什么需要这些元组?也许有更好的方法来做你想做的事情。
-
我必须对每个通配符中每个可能的匹配值组合进行特定的计算。我真的不需要“元组”,但我必须枚举通配符匹配的任何可能的值组合。