我在当前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()时也会发生同样的情况
这是因为Windows上的所有路径都不区分大小写(实际上,在Windows 10之前,没有办法使Windows区分大小写)。由于某些原因,当寻找完全匹配时,pathlib在Windows中将路径变为小写。当使用进行正常的遍历时*
,它将采用Windows的常规表示形式。
但是,Windows中不匹配的大小写无关紧要,如果信息的唯一使用者是计算机本身,则在处理文件时也不要紧。
好,不好。我想我必须忍受这一点并且需要找到一种解决方法。很难解释为什么我需要确切的符号。在脚本的后面,我将名称用作另一个程序的输入,由于某种原因,该程序需要确切的符号。
实际上,您可以使Windows区分大小写。但是不,默认情况下它不区分大小写。
@ShadowRanger感谢您的链接!我没有意识到他们在Windows 10中添加了该功能。我只知道在Windows的早期版本中您无法做到这一点。