En python, comment puis-je exclure des fichiers à partir d'une boucle si ils commencent avec un ensemble spécifique de lettres?
Je suis en train d'écrire un script Python qui va à travers un répertoire qui rassemble certains fichiers, mais il y a un certain nombre de fichiers que je veux exclus, tous les mêmes.
Exemple de code:
for name in files:
if name != "doc1.html" and name != "doc2.html" and name != "doc3.html":
print name
Disons qu'il y a 100 centaines de fichiers HTML dans le répertoire tout le début avec 'doc'
. Quel serait le moyen le plus facile de les exclure?
Désolé, je suis nouveau sur Python, je sais que c'est probablement de base.
Merci d'avance.
- Parfois, il vient de m'échappe - comment et pourquoi de telles questions 4 upvotes. En plus d'être un dupe de stackoverflow.com/questions/1176441/... et quelques autres questions, il est absolument trivial et montre un manque de base de la prise de conscience de ce que les outils de la langue fournit
- Vous dites que nous devrions ignorer le trivial et des questions de base? Juste parce que quelque chose est trivial et de base pour vous ne signifie pas qu'il n'est pas complexe et de nouveau à quelqu'un d'autre.
- Merci Daniel, j'ai besoin d'une solution rapide, et je suis venu à la bonne place parce que j'avais la solution en moins d'une minute.
- Je ne pense pas qu'il nous dit de ne pas poser de questions simples, c'est juste que les gens ne devraient pas voter jusqu'. Malheureusement, les questions complexes qui se fera probablement appel à un public plus restreint et obtenir le moins de votes. Oh, il n'est donc votre réponse Eli.
- Je suis avec @Eli, upvote signifie qu'il y a quelque chose de remarquable ou d'intéressant sur la question. C'est élémentaire.
- Non, bien sûr que non. Vous n'aurez plus jamais m'attraper noobie-bashing. Mais ce qui est le point de 4 upvotes pour un trivial, en double question?
- Je n'ai absolument rien contre vos poser cette question. Je suis content que vous avez obtenu de l'aide - c'est ce qui est DONC pour. Je vais avoir des scrupules avec le vote ici que biaise la réalité parfois
- upvote moyens (et je cite directement à partir du texte de l'infobulle) "Cette question est utile et clair". Qui ne comprend ni le "notable", ni "intéressant". Je suis assez sûr que beaucoup de gens upvote simplement parce que la question est concis et clair.
- Ne pas couper les cheveux ou quoi que ce soit :), mais je dirais que utile implique soit des "notables" ou "intéressant".
- subjective. Je pense que les deux "notables" et "intéressant" exiger un certain degré de nouveauté, tout en "utile" n'est certainement pas.
Vous devez vous connecter pour publier un commentaire.
Si vous avez plus de préfixes à exclure, vous pouvez même le faire:
startswith peut accepter un tuple de préfixes.
Si vous trouvez de la programmation fonctionnelle correspond à votre style mieux, Python le rend simple pour les listes de filtre avec le filtre() fonction:
Aussi jeter un oeil à appliquer(), map(), réduire(), et zip().
apply()
a été abandonné depuis 2.3: docs.python.org/library/functions.html#applyressemble à ce problème pourrait être un meilleur ajustement pour la liste des trucs
donc, comme Troy a dit (Bien que je préfère mettre de la fonction directement dans le filtre)
ou
Vous pouvez également utiliser un compréhension de liste.
C'est mes 2 cents:
Un peu de compréhension de liste.C'est toujours mieux pour l'efficacité.
Si tous les d'entre eux commencent le même ("doc"), vous pouvez utiliser python de la chaîne de startswith() la méthode.
Un autre prendre pour une fonctionnelle de la solution à ce problème, avec l'avantage de l'utilisation des récents ajouts à la bibliothèque standard (en utilisant le même exemple les noms de fichiers comme Troy J. Farrell dans une autre réponse) :
operator.methodcaller
appelé avecmethodname, [optional arguments]
retourne une fonction qui, lorsqu'elle est appelée avec un objetobj
comme argument, retourne le résultat deobj.methodname(optional_arguments)
.itertools.ifilterfalse
, contrairement àfilter
, retourne un itérateur au lieu d'une liste et le filtre décision est niée.Puisque vous n'avez pas te dire si il y a bien des fichiers commençant par 'doc' et se terminant par '.html', vous aurez à déclarer un
set
de mauvais noms de fichiers et de traiter uniquement les fichiers qui ne sont pas dans l'ensemble.Si vous avez besoin de changer dynamiquement la liste des noms de fichiers utiliser un
list
.