Python 過濾字串的技巧,map與itertools.imap

來源:互聯網
上載者:User

具體的執行個體
我們需要在目錄中遍曆,包括子目錄(哈哈),找出所有尾碼為: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
( ... 太多了,不要全輸出來吧~~)

擴充
CookBook一書中,提供的是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)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.