Python 过滤字符串的技巧:map与itertools.imap
本文介绍如何使用Python的map函数与itertools.imap实现高效的字符串过滤。通过递归遍历目录并匹配指定后缀(如rmvb、avi),演示了两种方法的代码实现。重点解析imap返回迭代器对象与map返回列表的区别,以及它们在内存占用和执行效率上的差异,适用于大规模文件处理场景。
假设我们需要在一个目录及其所有子目录中进行搜索,目标是找出所有后缀名为 rmvb、avi 或 pmp 的文件。
复制代码 代码如下:
import os
def anyTrue(predicate, sequence):
return True in map(predicate, sequence)
def filterFiles(folder, exts):
for fileName in os.listdir(folder):
if os.path.isdir(folder + '/' + fileName):
filterFiles(folder + '/' + fileName, exts)
elif anyTrue(fileName.endswith, exts):
print fileName
exts = ['.rmvb', '.avi', '.pmp']
filterFiles('/media/Personal/Movie', exts)
输出结果
查看生成的文件列表:
[66影视www.66ys.cn]迷失第四季04.rmvb
[迷失.第4季].Lost.S04E00.rmvb
[迷失Lost第四季][第02集][中文字幕].rmvb
《迷失Lost第四季》第05集[中文字幕].rmvb
《迷失Lost第四季》第06集[中文字幕].rmvb
《迷失Lost第四季》第07集[中文字幕].rmvb
天赐第2季01.rmvb
天赐第2季02.rmvb
天赐第2季03.rmvb
天赐第2季04.rmvb
天赐第2季05.rmvb
影视帝国(bbs.cnxp.com).美丽心灵.A.Beautiful.Mind.2001.CD1.rmvb
( ... 列表过长,此处省略部分输出)
扩展阅读
在相关技术文档中,推荐使用 itertools.imap 来实现字符串过滤。imap 与 map 的主要区别在于返回值类型:imap 返回一个迭代器(iteration)对象,而 map 返回一个完整的列表(list)对象。具体实现代码如下:
import itertools
def anyTrue(predicate, sequence):
return True in itertools.imap(predicate, sequence)
def endsWith(s, *endings):
return anyTrue(s.endswith, endings)
imap 的内部逻辑等价于以下生成器函数:
def imap(function, *iterables):
iterables = map(iter, iterables)
while True:
args = [i.next() for i in iterables]
if function is None:
yield tuple(args)
else:
yield function(*args)
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









