10
votes

Python: Os.listdir Alternative / Certaines extensions

est-il possible de voir des fichiers avec certaines extensions avec la commande OS.ListDir? Je veux que cela fonctionne de sorte qu'il puisse montrer uniquement des fichiers ou des dossiers avec .f à la fin. J'ai vérifié la documentation et je n'ai rien trouvé, alors ne demandez pas.


0 commentaires

5 Réponses :


15
votes

Ne demandez pas quoi? XXX PRE>

Si vous souhaitez vérifier une liste des extensions, vous pouvez faire la généralisation évidente, P>

[s for s in os.listdir() if s.rpartition('.')[2] in ('f','c','z')]


6 commentaires

Il y a beaucoup de choses qui sont des appels de fonction explicite dans d'autres langues remplacées par des opérations intégrées à Python. C'est difficile de garder la piste parfois. Par exemple, les différents modèles d'adaptateur dans la bibliothèque standard C ++ sont tout simplement Lambda en Python. C'est l'une de mes choses préférées sur Python.


"Ne demandez pas" signifie "Ne me demandez pas," Avez-vous vérifié la documentation, qu'est-ce que cela a dit? '"


@Ned: Je pensais en quelque sorte que c'était une question à moitié rhétorique.


[S dans os.listdir () si S.endswith ('. F')] entraîne une erreur de syntaxe ici à l'aide de Python 2.7. [s pour s dans os.listdir ('.') si S.endswith ('. F')] travaux


Je me demandais juste ce que "s" est censé être ici? J'ai essayé le code pour moi-même et cela fonctionne, mais j'ai du mal à comprendre lorsque des noms de variables apparemment arbitraires sont utilisés.


@ Q-Compute C'est juste une variable qui est définie sur le nom de chaque fichier dans le répertoire à son tour. Le nom est arbitraire afin que vous puissiez l'écrire pour vous-même avec un nom de variable différent si cela vous facilite la compréhension.



23
votes

glob code> est bon à ceci:

import glob
for f in glob.glob("*.f"):
    print(f)


2 commentaires

+1 wow, cela a beaucoup aidé! Mais ne pouvons-nous pas simplement imprimer (glob.glob ("*. Py"))?


Vous pouvez le faire, glob.glob renvoie une liste, faites ce que vous voulez avec elle.



0
votes
[s for s in os.listdir() if os.path.splitext(s) == 'f']

1 commentaires

Cela devrait être OS.Path.splitext (s) [1] == '.f' .



2
votes

Il y a une autre possibilité non mentionnée jusqu'à présent: xxx

en réalité, c'est la manière dont le module glob est mis en oeuvre, donc dans ce cas glob est plus simple et meilleur, mais le module fnmatch peut être pratique dans d'autres situations, par exemple Lors d'une traversée d'arbre à l'aide de os.walk .


0 commentaires

1
votes

Essayez ceci:

from os import listdir

extension = '.wantedExtension'

mypath = r'my\path'

filesWithExtension = [ f for f in listdir(mypath) if f[(len(f) - len(extension)):len(f)].find(extension)>=0 ]


0 commentaires