Ce face os.scandir() și os.DirEntry
scandir() returnează un iterator de obiecte os.DirEntry. Fiecare are name, path (calea completă) și metodele is_file(), is_dir(), is_symlink(), stat(). Tipul elementului vine adesea direct din listarea directorului, fără apeluri suplimentare către disc, deci este mult mai rapid decât listdir() urmat de os.path.isdir() pentru fiecare.
Folosește-l cu with, ca resursele să fie eliberate imediat.
Parametri
| Parametru | Descriere |
|---|---|
cale |
Opțional. Directorul parcurs. |
Ce returnează
Un iterator de os.DirEntry.
Exemple
Exemplul 1: Fișiere și mărimi
import os
os.makedirs("arhiva/vechi", exist_ok=True)
with open("arhiva/raport.txt", "w") as f:
f.write("x" * 1500)
with open("arhiva/note.txt", "w") as f:
f.write("abc")
with os.scandir("arhiva") as intrari:
for e in sorted(intrari, key=lambda e: e.name):
tip = "dir" if e.is_dir() else "fișier"
marime = e.stat().st_size if e.is_file() else "-"
print(f"{e.name:12} {tip:7} {marime}", e.path, isinstance(e, os.DirEntry))
Rezultat
note.txt fișier 3 arhiva/note.txt True
raport.txt fișier 1500 arhiva/raport.txt True
vechi dir - arhiva/vechi True
Greșeli frecvente
- Păstrezi obiectele
DirEntrymult timp: informațiile lor reflectă momentul listării și pot deveni învechite.
Comenzi înrudite
os.listdir(): Returnează lista numelor fișierelor și directoarelor dintr-un director.os.walk() și os.fwalk(): Parcurge recursiv un arbore de directoare, dând pentru fiecare director subdirectoarele și fișierele lui.Path.iterdir(), glob(), rglob() și walk(): Parcurge conținutul unui director, cu sau fără subdirectoare, eventual filtrat după un model.