问题描述
如果我为 dir_fd
的 os.fwalk()
参数分配一个整数,则第四个值被添加到 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'],('/home/test/input/c',['ca'],('/home/test/input/c/ca',['caa'],['cab.txt'],('/home/test/input/c/ca/caa',['caaa.txt'],84)]
解决方法
dir_fd
的 documentation 位置混乱。这是它所说的:
相对于目录描述符的路径:如果dir_fd不是None
,它应该是一个引用目录的文件描述符,以及要操作的路径应该是相对的;然后路径将相对于该目录。如果路径是绝对路径,则忽略 dir_fd。 (对于 POSIX 系统,Python 将调用带有 at
后缀并可能带有 f
前缀的函数变体(例如调用 faccessat
而不是 access
)。
您可以使用 os.supports_dir_fd
检查您平台上的特定功能是否支持 dir_fd。如果它不可用,使用它会引发 NotImplementedError
。
因此,如果您传递 dir_fd
,那么 fwalk
会将路径参数解释为相对于文件描述符指定的目录。
(听起来您甚至不知道文件描述符是什么。文件描述符是标识打开的文件或目录的整数。您可以使用 os.open
或其他一些方法来获取。在这里使用文件描述符而不是路径的优点是,即使内容被移动或重命名,文件描述符仍然有效,从而使旧路径无效。)