← retour aux snippets

os.walk: parcourir et filtrer efficacement

Parcourir un arbre de fichiers en filtrant extensions et dossiers.

python filesystem #os#walk#traverse

objectif

Parcourir un arbre de fichiers en filtrant extensions et dossiers.

code minimal

import os, tempfile, pathlib
with tempfile.TemporaryDirectory() as tmp:
    root = pathlib.Path(tmp)
    (root/"x").mkdir()
    (root/"x"/"a.log").write_text("x", encoding="utf-8")
    (root/"x"/"b.txt").write_text("y", encoding="utf-8")
    out = []
    for d, dirs, files in os.walk(root):
        dirs[:] = [dn for dn in dirs if dn != "__pycache__"]
        for f in files:
            if f.endswith(".txt"):
                out.append(f)
    print(out == ["b.txt"])  # attendu: True

utilisation

import os
print(hasattr(os, "walk"))

variante(s) utile(s)

import os, pathlib, tempfile
with tempfile.TemporaryDirectory() as tmp:
    root = pathlib.Path(tmp)
    (root/"a.txt").write_text("x", encoding="utf-8")
    sizes = {f.name: (root/f).stat().st_size for f in os.listdir(root)}
    print("a.txt" in sizes)

notes

  • Modifiez dirs in-place pour éviter de descendre dans des dossiers exclus.
  • os.scandir() est plus rapide pour lister un seul dossier.