2010-06-26 24 views
7

È possibile visualizzare file con determinate estensioni con il comando os.listdir? Voglio che funzioni, in modo che possa mostrare solo file o cartelle con .f alla fine. Ho controllato la documentazione e non ho trovato nulla, quindi non chiedere.Python: alternativa os.listdir/alcune estensioni

risposta

19

glob è bravo in questo:

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

+1 buona idea, che non mi era mai venuta in mente. –

+0

+1 wow, è stato di grande aiuto! Ma non possiamo semplicemente stampare (glob.glob ("*. Py"))? – Galilsnap

+2

Puoi farlo, glob.glob restituisce un elenco, fai quello che vuoi con esso. –

6

Non chiedere cosa?

[s for s in os.listdir() if s.endswith('.f')] 

Se si desidera controllare un elenco di estensioni, si potrebbe fare la generalizzazione ovvia,

[s for s in os.listdir() if s.endswith('.f') or s.endswith('.c') or s.endswith('.z')] 

o quest'altro modo è un po 'più corto di scrivere:

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

Ci sono un sacco di cose che sono funzione esplicita chiamate in altre lingue che vengono sostituiti dalle operazioni incorporati in Python. È difficile tenere traccia a volte. Ad esempio, i vari modelli di adattatore nella libreria standard C++ sono semplicemente 'lambda' in Python. È una delle cose che preferisco di Python. –

+0

"Non chiedere" significa "non chiedermelo", hai controllato la documentazione, cosa ha detto? "" –

+0

@Ned: ho pensato che fosse una domanda a metà retorica. –

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

Questo dovrebbe essere 'os.path.splitext (s) [1] == '.f''. – Philipp

1

C'è un'altra possibilità non menzionata finora:

import fnmatch 
import os 

for file in os.listdir('.'): 
    if fnmatch.fnmatch(file, '*.f'): 
     print file 

In realtà questo è il modo è implementato il modulo glob, quindi in questo caso glob è più semplice e meglio, ma il modulo fnmatch può essere utile in altri situazioni, ad es quando si fa un attraversamento dell'albero usando os.walk.

0

Prova questo:

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 ] 
Problemi correlati