场景如下:
我有一长串带时间戳的文件名,在时间戳前后都有字符。
像这样:prefix_20160817_suffix
我想要的是一个列表(最终将成为原始列表的子集),其中包含具有特定前缀、后缀和部分时间戳的文件名。这些特定字符串已在列表中给出。注意:此“包含”列表的大小可能会有所不同。
例如:['prefix1', '2016', 'suffix'] 或 ['201608', 'suffix']
如何轻松获取包含“contains”数组中每个元素的文件名列表?
这里有一些伪代码来演示我想要什么:
for each fileName in the master list:
if the fileName contains EVERY element in the "contains" array:
add fileName to filtered list of filenames
请您参考如下方法:
我会将列表编译成 fnmatch pattern :
import fnmatch
pattern = '*'.join(contains)
filetered_filenames = fnmatch.filter(master_list, pattern)
这基本上将 contains 中的所有字符串连接成一个 glob 模式,中间有 * 通配符。这假设 contains 的顺序很重要。鉴于您正在寻找前缀、后缀和两者之间的(部分)日期,这并没有那么困难。
重要的是要注意,如果您在具有不区分大小写的文件系统的操作系统上运行它,则 fnmatch 匹配也是不区分大小写的。在那种情况下,这通常正是您想要的。
