os.scandir() și os.DirEntry în Python

Fișiere și directoare (os) Python 3.5+ (context manager: 3.6+)

Parcurge un director rapid, cu tipul și informațiile fiecărui element.

Sintaxă
with os.scandir(cale) as intrari:
    for e in intrari:
        e.name, e.path, e.is_file(), e.stat()

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 DirEntry mult timp: informațiile lor reflectă momentul listării și pot deveni învechite.

Comenzi înrudite