Python 用于目录搜索的 rglob 模式
Python rglob pattern for directory search
我尝试在 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参数的模式returns会这样。
谁能解释一下?
谢谢。
posix 风格的文件系统中的每个目录都有两个文件:..
,指的是父目录,.
,指的是当前目录目录:
$ mkdir tmp; cd tmp
tmp$ ls -a
. ..
tmp$ cd .
tmp$ # <-- still in the same directory
- 值得注意的例外是 /..
,它指的是根本身,因为根没有父代。
来自 python 的 pathlib
的 Path
对象在创建时只是一个字符串包装器,该字符串假定指向文件系统中的某处。它只会在 解决:
时提及有形的东西
>>> Path('.')
PosixPath('.') # just a fancy string
>>> Path('.').resolve()
PosixPath('/current/working/dir') # an actual point in your filesystem
底线是
- 从文件系统的角度来看,路径
/current/working/dir
和 /current/working/dir/.
是完全等价的,并且
- a
pathlib.Path
解决后也会反映出来[=44=]
通过将 glob
调用与 .
相匹配,您发现所有指向初始目录下当前目录的链接。 glob
的结果在 return 得到解决,因此 .
不再出现。
作为此行为的来源,请参阅 PEP428 的 this section(作为 pathlib
的规范),其中简要提到了路径等效性。
我尝试在 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参数的模式returns会这样。
谁能解释一下?
谢谢。
posix 风格的文件系统中的每个目录都有两个文件:..
,指的是父目录,.
,指的是当前目录目录:
$ mkdir tmp; cd tmp
tmp$ ls -a
. ..
tmp$ cd .
tmp$ # <-- still in the same directory
- 值得注意的例外是 /..
,它指的是根本身,因为根没有父代。
来自 python 的 pathlib
的 Path
对象在创建时只是一个字符串包装器,该字符串假定指向文件系统中的某处。它只会在 解决:
>>> Path('.')
PosixPath('.') # just a fancy string
>>> Path('.').resolve()
PosixPath('/current/working/dir') # an actual point in your filesystem
底线是
- 从文件系统的角度来看,路径
/current/working/dir
和/current/working/dir/.
是完全等价的,并且 - a
pathlib.Path
解决后也会反映出来[=44=]
通过将 glob
调用与 .
相匹配,您发现所有指向初始目录下当前目录的链接。 glob
的结果在 return 得到解决,因此 .
不再出现。
作为此行为的来源,请参阅 PEP428 的 this section(作为 pathlib
的规范),其中简要提到了路径等效性。