为什么Path.rglob()如果整个名称被指定为模式,则返回小写文件名?

2024-10-02 14:16:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为“的可执行文件”我的camelcase.exe在当前python脚本目录和子文件夹“MyFolder”中。另外,在“MyFolder”中还有另一个可执行文件DontWannaFindThis.exe". 我想找出所有的我的camelcase.exe“在当前目录和所有子文件夹中。因此,我使用路径.rglob(图案):

from pathlib import Path

if __name__ == '__main__':

    [print(f) for f in Path.cwd().rglob('MyCamelCase.exe')]
    [print(f) for f in Path.cwd().rglob('.\MyCamelCase.exe')]
    [print(f) for f in Path.cwd().rglob('*.exe')]

此代码导致以下输出:

^{pr2}$

如果提供完整的文件名,而另一方面,当使用带有“.*”的模式时,rglob为什么只返回小写的字符串,而返回一个包含原始符号的字符串? 注意:使用时也会发生这种情况路径.glob()


Tags: path字符串in路径脚本文件夹可执行文件for
2条回答

这是因为Windows上的所有路径都不区分大小写(事实上,在windows10之前没有办法使Windows区分大小写)。由于某些原因,在查找完全匹配的情况下,pathlib会使Windows中的路径变为小写。当它用*进行普通的globbing时,它从Windows获取任何正常表示。在

不过,在Windows中大小写不匹配应该无关紧要,而且在处理文件时,信息的唯一使用者是否是计算机本身也不重要。在

正如已经回答的,这是Windows上的正确行为。但是,如果您想显示完整路径而不放弃大小写,resolve()方法可能会有用。在

例如

from pathlib import Path

if __name__ == '__main__':

    [print(f) for f in Path.cwd().rglob('MyCamelCase.exe').resolve()]
    [print(f) for f in Path.cwd().rglob('.\MyCamelCase.exe').resolve()]
    [print(f) for f in Path.cwd().rglob('*.exe').resolve()]

注意,.resolve()通常用于将相对路径和/或符号链接路径转换为绝对路径。在

相关问题 更多 >

    热门问题