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_fd
的 documentation 位置混乱。内容如下:
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
或其他几种方式获得一个。在这里使用文件描述符而不是路径的优点是,即使内容被移动或重命名,文件描述符仍然有效,使旧路径无效。)
如果我将一个整数分配给 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_fd
的 documentation 位置混乱。内容如下:
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 anat
suffix and possibly prefixed withf
(e.g. callfaccessat
instead ofaccess
).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 aNotImplementedError
.
因此,如果您传递 dir_fd
,则 fwalk
会将路径参数解释为相对于文件描述符指定的目录。
(听起来您甚至都不知道文件描述符是什么。文件描述符是一个整数,用于标识打开的文件或目录。您可以使用 os.open
或其他几种方式获得一个。在这里使用文件描述符而不是路径的优点是,即使内容被移动或重命名,文件描述符仍然有效,使旧路径无效。)