我尝试在Windows10上使用Python3脚本获取子目录的名称。 因此,我编写了如下代码:
from pathlib2 import Path
p = "./path/to/target/dir"
[str(item) for item in Path(p).rglob(".")]
# obtained only subdirectories path names including target directory itself.
得到这个结果对我来说是好事,但是我不知道为什么rglob参数的模式返回此重用。
有人可以解释吗?
谢谢。
答案 0 :(得分:2)
posix样式文件系统中的每个目录从一开始就具有两个文件:..
(引用父目录)和.
(引用当前目录)
$ mkdir tmp; cd tmp
tmp$ ls -a
. ..
tmp$ cd .
tmp$ # <-- still in the same directory
-除了/..
例外,它是指根本身,因为根没有父级。
Python Path
中的pathlib
对象在创建时只是一个字符串的包装,该包装被认为指向文件系统中的某处。它只会在已解析
>>> Path('.')
PosixPath('.') # just a fancy string
>>> Path('.').resolve()
PosixPath('/current/working/dir') # an actual point in your filesystem
最重要的是
/current/working/dir
和/current/working/dir/.
是完全等效的,并且pathlib.Path
也会在解决后立即反映出来。通过将glob
调用与.
匹配,您找到了指向初始目录下所有当前目录的链接。 glob
的结果将在返回时得到解析,因此.
不再显示在那里。
有关此行为的信息,请参阅PEP428的this section(用作pathlib
的规范),其中简要提到了路径等效。