Python 3.3+Linux · macOSosфункция
os.fwalk
os — обход дерева
Как os.walk, но дополнительно выдаёт дескриптор каталога (безопаснее к гонкам). Доступно на Unix.
Синтаксис
os.fwalk(...)
Выдаёт дескриптор каталога, и операции относительно него (stat(name, dir_fd=fd)) защищают от подмены каталога символической ссылкой посреди обхода. Дескриптор действителен только до следующего шага — чтобы сохранить его, сделайте os.dup. В отличие от других функций, по умолчанию не следует по ссылкам (follow_symlinks=False).
Примеры
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, который на несуществующем каталоге молча даёт []
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности