os.fwalk() 的 dir_fd 参数有什么作用?

What does the dir_fd argument of os.fwalk() do?

如果我将一个整数分配给 os.fwalk()dir_fd 参数,则将第四个值添加到 list(os.fwalk()).

生成的每个元组中

我知道它们与组织文件和目录的层次结构有关,但我不太明白它们的确切含义。

此外,值会根据分配给 dir_fd 的整数而变化,并且总是缺少一个数字(在本例中为 82,见下文)。

有什么想法吗?

代码:

import os

os.chdir("/home/test")
inp = str(os.getcwd() + "/input")

l = list(os.fwalk(inp, dir_fd=3))

输出:

[('/home/test/input', ['a', 'b', 'c'], ['d.txt'], 80),
 ('/home/test/input/a', ['aa'], ['ac.txt', 'ab.txt'], 81),
 ('/home/test/input/a/aa', [], [], 83),
 ('/home/test/input/b', [], ['bb.txt', 'bc.txt', 'ba.txt'], 81),
 ('/home/test/input/c', ['ca'], [], 81),
 ('/home/test/input/c/ca', ['caa'], ['cab.txt'], 83),
 ('/home/test/input/c/ca/caa', [], ['caaa.txt'], 84)]

dir_fddocumentation 位置混乱。内容如下:

paths relative to directory descriptors: If dir_fd is not None, it should be a file descriptor referring to a directory, and the path to operate on should be relative; path will then be relative to that directory. If the path is absolute, dir_fd is ignored. (For POSIX systems, Python will call the variant of the function with an at suffix and possibly prefixed with f (e.g. call faccessat instead of access).

You can check whether or not dir_fd is supported for a particular function on your platform using os.supports_dir_fd. If it’s unavailable, using it will raise a NotImplementedError.

因此,如果您传递 dir_fd,则 fwalk 会将路径参数解释为相对于文件描述符指定的目录。

(听起来您甚至都不知道文件描述符是什么。文件描述符是一个整数,用于标识打开的文件或目录。您可以使用 os.open 或其他几种方式获得一个。在这里使用文件描述符而不是路径的优点是,即使内容被移动或重命名,文件描述符仍然有效,使旧路径无效。)