Jak mogę wyświetlić zawartość katalogu w Pythonie?

186

Nie może być trudne, ale mam blokadę umysłową.

Paul D. Waite
źródło

Odpowiedzi:

260
import os
os.listdir("path") # returns list
użytkownik85461
źródło
52

Jednokierunkowa:

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

Inny sposób :

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

Przykłady znalezione tutaj .

Powyższa glob.globmetoda nie spowoduje wyświetlenia ukrytych plików.

Ponieważ pierwotnie odpowiedziałem na to pytanie lata temu, pathlib został dodany do Pythona. Mój preferowany sposób wyświetlenia katalogu zwykle obejmuje teraz iterdirmetodę dotyczącą Pathobiektów:

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")
Trey Hunner
źródło
Czy glob.glob wyświetla listę ukrytych plików (zakładam, że masz na myśli .XYZpliki w kontekście uniksowego systemu plików), gdy jest używany z glob.glob("/home/username/www/.*")?
Andy Finkenstadt,
Tak, mam na myśli pliki zaczynające się od kropki. Podany przykład będzie działał w przypadku dopasowywania ukrytych plików (i tylko ukrytych plików).
Trey Hunner,
Właśnie zaimportowałem glob i użyłem glob.glob (r'c: \ users '), ale to tylko wróciło['c:\\users']
Musixauce3000 14.04.16
1
@ Musixauce3000: Będziesz chciał to zrobić glob.glob(r'c:\users\*')(glob tak naprawdę nie wyświetla katalogów, ale rozszerza gwiazdki i takie, które spełniają podobne zadanie).
Trey Hunner,
38

os.walk można użyć, jeśli potrzebujesz rekurencji:

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
źródło
18

glob.globlub os.listdirzrobi to.

Tuomas Pelkonen
źródło
import globENTER glob.glob(r'c:\users')ENTER wydaje się powracać ['c:\\users']. Dlaczego? Chciałbym użyć glob.glob, ponieważ, jak zauważyli inni użytkownicy, podobno zwraca zawartość katalogu, ignorując jednocześnie ukryte pliki. To jest ważne.
Musixauce3000 14.04.16
ponieważ musisz podać symbol wieloznaczny z glob:glob.glob(r'c:\users\*')
Jean-François Fabre
14

Do osModuł obsługuje wszystkie te rzeczy.

os.listdir(path)

Zwraca listę zawierającą nazwy pozycji w katalogu podaną przez ścieżkę. Lista jest w dowolnej kolejności. Nie obejmuje wpisów specjalnych „”. i „..”, nawet jeśli są obecne w katalogu.

Dostępność: Unix, Windows.

zdav
źródło
4

W Pythonie 3.4+ możesz użyć nowego pathlibpakietu:

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

Path.iterdir()zwraca iterator, który można łatwo przekształcić w list:

contents = list(Path('.').iterdir())
jpyams
źródło
3

Od wersji Python 3.5 możesz używać os.scandir.

Różnica polega na tym, że zwraca wpisy pliku, a nie nazwy. W niektórych systemach operacyjnych, takich jak Windows, oznacza to, że nie musisz os.path.isdir/filewiedzieć, czy jest to plik, czy nie, a to oszczędza czas procesora, ponieważstat jest to już zrobione podczas skanowania w systemie Windows:

przykład, aby wyświetlić katalog i wydrukować pliki większe niż max_valuebajty:

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

(przeczytaj tutaj moją obszerną odpowiedź na temat wydajności )

Jean-François Fabre
źródło
2

Poniższy kod wyświetli katalogi i pliki w katalogu. Drugi to 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
źródło