温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Why does Path.rglob() returns filenames in lower case if whole name is specified as pattern?
python python-3.x glob

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

发布于 2020-03-27 11:55:50

我在当前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')]

此代码导致以下输出:

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

如果提供全文件名,为什么rglob仅返回小写字母的字符串,而在使用带'。*'的模式时,为什么返回包含原始符号的字符串呢?注意:使用Path.glob()时也会发生同样的情况

查看更多

查看更多

提问者
airborne
被浏览
162
Edward Minnix 2019-07-03 23:53

这是因为Windows上的所有路径都不区分大小写(实际上,在Windows 10之前,没有办法使Windows区分大小写)。由于某些原因,当寻找完全匹配时,pathlib在Windows中将路径变为小写。当使用进行正常的遍历时*,它将采用Windows的常规表示形式。

但是,Windows中不匹配的大小写无关紧要,如果信息的唯一使用者是计算机本身,则在处理文件时也不要紧。