Wie kann ich den Inhalt eines Verzeichnisses in Python auflisten?

185

Kann nicht schwer sein, aber ich habe eine mentale Blockade.

Paul D. Waite
quelle

Antworten:

258
import os
os.listdir("path") # returns list
user85461
quelle
52

Einweg:

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

Ein anderer Weg :

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

Beispiele finden Sie hier .

Die glob.globobige Methode listet keine versteckten Dateien auf.

Seit ich diese Frage vor Jahren beantwortet habe, wurde pathlib zu Python hinzugefügt. Meine bevorzugte Methode zum Auflisten eines Verzeichnisses umfasst jetzt normalerweise die iterdirMethode für PathObjekte:

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")
Trey Hunner
quelle
Würde glob.glob versteckte Dateien auflisten (ich nehme an, Sie meinen .XYZDateien in einem Unix-Dateisystemkontext), wenn sie mit verwendet werden glob.glob("/home/username/www/.*")?
Andy Finkenstadt
Ja, ich meine Dateien, die mit einem Punkt beginnen. Das von Ihnen angegebene Beispiel funktioniert zum Abgleichen versteckter Dateien (und nur versteckter Dateien).
Trey Hunner
Ich habe gerade glob importiert und glob.glob (r'c: \ users ') verwendet, aber es ist nur zurückgekehrt['c:\\users']
Musixauce3000
1
@ Musixauce3000: Du wirst es tun wollen glob.glob(r'c:\users\*')(glob, es listet eigentlich keine Verzeichnisse auf, sondern erweitert Sternchen und solche, die eine ähnliche Aufgabe erfüllen).
Trey Hunner
38

os.walk kann verwendet werden, wenn Sie eine Rekursion benötigen:

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)
Mark Tolonen
quelle
18

glob.globoder os.listdirwird es tun.

Tuomas Pelkonen
quelle
import globENTER glob.glob(r'c:\users')ENTER scheint nur zurückzukehren ['c:\\users']. Warum ist das so? Ich möchte glob.glob verwenden, da es, wie andere Benutzer bereits betont haben, angeblich den Inhalt eines Verzeichnisses zurückgibt und gleichzeitig versteckte Dateien ignoriert. Das ist wichtig.
Musixauce3000
weil Sie einen Platzhalter angeben müssen mit glob:glob.glob(r'c:\users\*')
Jean-François Fabre
14

Das osModul erledigt all diese Dinge.

os.listdir(path)

Gibt eine Liste zurück, die die Namen der Einträge in dem durch path angegebenen Verzeichnis enthält. Die Liste ist in beliebiger Reihenfolge. Die Sondereinträge '.' Sind nicht enthalten. und '..' auch wenn sie im Verzeichnis vorhanden sind.

Verfügbarkeit: Unix, Windows.

zdav
quelle
4

In Python 3.4+ können Sie das neue pathlibPaket verwenden:

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

Path.iterdir()Gibt einen Iterator zurück, der leicht in Folgendes umgewandelt werden kann list:

contents = list(Path('.').iterdir())
jpyams
quelle
3

Seit Python 3.5 können Sie verwenden os.scandir.

Der Unterschied besteht darin, dass Dateieinträge und keine Namen zurückgegeben werden. Unter einigen Betriebssystemen wie Windows bedeutet dies, dass Sie nicht os.path.isdir/filewissen müssen, ob es sich um eine Datei handelt oder nicht. Dies spart CPU-Zeit, da statdies bereits beim Scannen von Verzeichnissen in Windows erfolgt:

Beispiel zum Auflisten eines Verzeichnisses und zum Drucken von Dateien, die größer als max_valueBytes sind:

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

(lesen Sie eine umfangreiche leistungsbasierte Antwort von mir hier )

Jean-François Fabre
quelle
2

Der folgende Code listet Verzeichnisse und die Dateien im Verzeichnis auf. Der andere ist 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)
Heenashree Khandelwal
quelle