Come posso elencare il contenuto di una directory in Python?


Risposte:



52

Senso unico:

import os
os.listdir("/home/username/www/")

Un altro modo :

glob.glob("/home/username/www/*")

Esempi trovati qui .

Il glob.globmetodo sopra non elencherà i file nascosti.

Da quando ho risposto a questa domanda anni fa, pathlib è stato aggiunto a Python. Il mio modo preferito per elencare una directory ora di solito prevede il iterdirmetodo sugli Pathoggetti:

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")

Glob.glob elencherebbe i file nascosti (suppongo tu intenda i .XYZfile in un contesto di file system Unix), se utilizzato con glob.glob("/home/username/www/.*")?
Andy Finkenstadt,

Sì, intendo i file che iniziano con un punto. L'esempio che hai fornito funzionerebbe per la corrispondenza dei file nascosti (e solo dei file nascosti).
Trey Hunner,

Ho appena importato glob e usato glob.glob (r'c: \ users ') ma è tornato solo['c:\\users']
Musixauce3000

1
@ Musixauce3000: Ti consigliamo di farlo glob.glob(r'c:\users\*')(glob non elenca effettivamente le directory, ma espande asterischi e simili che compie un compito simile).
Trey Hunner,

38

os.walk può essere utilizzato se è necessaria la ricorsione:

import os
start_path = '.' # current directory
for path,dirs,files in os.walk(start_path):
    for filename in files:
        print os.path.join(path,filename)

18

glob.globo os.listdirlo farà.


import globENTER glob.glob(r'c:\users')ENTER sembra solo tornare ['c:\\users']. Perché? Mi piacerebbe usare glob.glob perché come altri utenti hanno sottolineato, presumibilmente restituisce il contenuto di una directory ignorando anche i file nascosti. Questo è importante.
Musixauce3000,

perché devi specificare un carattere jolly con glob:glob.glob(r'c:\users\*')
Jean-François Fabre

14

Il osmodulo gestisce tutta quella roba.

os.listdir(path)

Restituisce un elenco contenente i nomi delle voci nella directory fornite dal percorso. L'elenco è in ordine arbitrario. Non include le voci speciali "." e '..' anche se sono presenti nella directory.

Disponibilità: Unix, Windows.


4

In Python 3.4+, puoi usare il nuovo pathlibpacchetto:

from pathlib import Path
for path in Path('.').iterdir():
    print(path)

Path.iterdir()restituisce un iteratore, che può essere facilmente trasformato in un list:

contents = list(Path('.').iterdir())

3

Da Python 3.5, puoi usare os.scandir.

La differenza è che restituisce voci di file e non nomi. Su alcuni sistemi operativi come Windows, significa che non devi os.path.isdir/filesapere se si tratta di un file o meno, e questo fa risparmiare tempo alla CPU perché statè già fatto quando si esegue la scansione di dir in Windows:

esempio per elencare una directory e stampare file più grandi di max_valuebyte:

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

(leggi una mia ampia risposta basata sulle prestazioni qui )


2

Il codice seguente elenca le directory e i file all'interno della directory. L'altro è os.walk

def print_directory_contents(sPath):
        import os                                       
        for sChild in os.listdir(sPath):                
            sChildPath = os.path.join(sPath,sChild)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.