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


Odpowiedzi:



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")

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)

18

glob.globlub os.listdirzrobi to.


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.


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())

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 )


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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.