22 lines
627 B
Python
22 lines
627 B
Python
import os
|
|
import types
|
|
|
|
|
|
def _wrap_treedir_entry(ent, prefix=""):
|
|
wrapped = types.SimpleNamespace()
|
|
wrapped.name = f"{prefix}/{ent.name}" if prefix else ent.name
|
|
wrapped.path = ent.path
|
|
wrapped.is_dir = ent.is_dir
|
|
wrapped.is_file = ent.is_file
|
|
wrapped.is_symlink = ent.is_symlink
|
|
return wrapped
|
|
|
|
|
|
def treedir(root: str, prefix: str = ""):
|
|
with os.scandir(root) as entries:
|
|
for ent in entries:
|
|
wrapped = _wrap_treedir_entry(ent, prefix)
|
|
yield wrapped
|
|
if wrapped.is_dir(follow_symlinks=False):
|
|
yield from treedir(ent.path, wrapped.name)
|