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

air*_*rne 3 python glob python-3.x

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

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')]
Run Code Online (Sandbox Code Playgroud)

此代码会产生以下输出:

D:\PyTesting\mycamelcase.exe 
D:\PyTesting\MyFolder\mycamelcase.exe
D:\PyTesting\mycamelcase.exe
D:\PyTesting\MyFolder\mycamelcase.exe
D:\PyTesting\MyCamelCase.exe
D:\PyTesting\MyFolder\DontWannaFindThis.exe
D:\PyTesting\MyFolder\MyCamelCase.exe
Run Code Online (Sandbox Code Playgroud)

为什么 rglob 在提供完整文件名的情况下返回仅小写的字符串,而另一方面在使用带有“.*”的模式时返回包含原始符号的字符串?注意:使用 Path.glob() 时也会发生同样的情况

Edw*_*nix 5

这是因为 Windows 上的所有路径都不区分大小写(事实上,在 Windows 10 之前没有办法使 Windows 区分大小写)。由于某种原因,当查找完全匹配时,pathlib 在 Windows 中使路径小写。当它使用 进行正常的通配时*,它会采用来自 Windows 的任何正常表示形式。

不过,Windows 中的大小写不匹配应该无关紧要,如果信息的唯一使用者是计算机本身在处理文件时,则不会有什么影响。

  • 实际上,[您可以使 Windows 区分大小写](https://www.howtogeek.com/354220/how-to-enable-case-sensitive-folders-on-windows-10/)。但不,默认情况下不区分大小写。 (3认同)