Python 3.3+Linux · macOSosfunction
os.fwalk
os — tree walking
Like os.walk, but also yields a directory file descriptor. Availability: Unix.
Syntax
os.fwalk(...)
It yields a directory descriptor, and operations relative to it (stat(name, dir_fd=fd)) guard against a directory being swapped for a symlink mid-walk. The descriptor is valid only until the next step — call os.dup to keep it. Unlike other functions it does not follow symlinks by default (follow_symlinks=False).
Examples
import os
walker = os.fwalk('/etc') # генератор держим в переменной: пока он жив, жив и дескриптор каталога
step = next(walker)
print(len(step)) # → 4 — (dirpath, dirnames, filenames, dirfd); у os.walk элементов 3
print(step[0]) # → ? только Unix: /etc — обход начинается с корня дерева
print(os.stat(step[2][0], dir_fd=step[3]).st_size) # → ? только Unix: размер первого файла в /etc, полученный через дескриптор каталога, а не по пути — ради этого fwalk и берут
print(list(os.fwalk('/нет-такого'))) # → FileNotFoundError — в отличие от os.walk, который на несуществующем каталоге молча даёт []
See also
Open in the full glossarydocs.python.orgReport an inaccuracy