pathlib的match(pattern)
被记录为将提供的glob样式模式与路径进行匹配,但实际上它并不起作用。
>>> Path("w/x/y/z").mkdir(parents=True)
>>> list(Path().glob("w/**/z"))
[PosixPath('w/x/y/z')]
>>> Path("w/x/y/z").match("w/**/z")
False
这个应该返回true吧?
**
的全局模式不会穿过路径分隔符。至少path.match()
函数没有实现它。也许可以尝试使用递归全局匹配path.rglob()
。
尝试:
In [1]: from pathlib import Path
In [2]: p = Path("w/z/y/z")
In [3]: p.mkdir(parents=True)
In [5]: p.match("w/*/*/z")
Out[5]: True
rglob
。不可接受的是什么?你的问题没有提出一个使用案例。你问是否应该返回True
,给定glob样式模式,答案是否定的。 - myz540Path.match
用于检查一个字符串是否符合某种模式。Path.rglob
用于在文件系统中查找与某种模式匹配的文件。这两者是完全不同的东西,使用 match
时甚至可能根本没有可用的文件系统,例如处理从 csv 文件或数据库中获取的路径。 - no step on snekPath("w/x/y/z").match("w/**/z")
不应该返回 True 呢?它匹配了 glob 模式,不是吗? - no step on snekPath("w/x/y/z").match("z")
,因此我认为它与星号无关 - 但是,我期望它需要评估为true:Path("w/x/y/z").match("**/z")
。 - Jeppe
**
进行单独处理。glob()
通常用于搜索产生多个匹配项的目录路径,但是match()
用于比较特定情况。 Path("w/x/y/z").match("w///z")有效吗? - Ben Yrglob()
可以实现他想要的功能。 - myz540match()
与glob()
或rglob()
的工作方式不同。它没有实现将**
视为多级目录的特殊匹配。答案是否定的,正如@myz540所说。 - Ben Y