Maison >développement back-end >Tutoriel Python >Conseils Python pour filtrer les chaînes

Conseils Python pour filtrer les chaînes

巴扎黑
巴扎黑original
2017-05-21 18:52:212933parcourir

La fonction map en Python est très utile. Elle est apparue à la fois dans les sections de conversion de caractères et de traversée de caractères. Maintenant, elle réapparaît. Quel genre de surprises va-t-elle nous apporter ? Essayez-vous de nous dire que la carte est géniale et que nous devrions jouer davantage avec elle à l'avenir ?

Exemple spécifique
Nous devons parcourir le répertoire, y compris les sous-répertoires (haha), et trouver tous les fichiers avec le suffixe : rmvb, avi, pmp. (Oh mon Dieu ?! Que fais-tu ? C'est ma vie privée~~)

Le code est le suivant :

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)

Résultats de sortie
Voyons ce qui se passe bon Dongdong :
[66影视www.66ys.cn] Lost Saison 4 04.rmvb
[Lost.Saison 4].Lost.S04E00.rmvb
[Lost Saison 4][Saison 4] Épisode 02 ] [Sous-titres chinois].rmvb
"Lost Saison 4" Épisode 05 [Sous-titres chinois].rmvb
"Lost Saison 4" Épisode 06 [Sous-titres chinois].rmvb
"Lost Saison 4" Épisode 07 [ Chinese subtitles].rmvb
Godsend Saison 2 01.rmvb
Godsend Saison 2 02.rmvb
Godsend Saison 2 03.rmvb
Godsend Saison 2 04.rmvb
Godsend Saison 2 05.rmvb
Empire du cinéma et de la télévision (bbs.cnxp.com).A.Beautiful.Mind.2001.CD1.rmvb
( ... Il y en a trop, ne les diffusez pas tous ~~)


Extensions
CookBook fournit itertools.imap pour filtrer les chaînes. La différence entre imap et map est que imap renvoie un objet itération, tandis que map renvoie un objet liste. Le code est le suivant :

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)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn