Почему Path.rglob () возвращает имена файлов в нижнем регистре, если в качестве шаблона указано полное имя? - PullRequest
2 голосов
/ 03 июля 2019

У меня есть исполняемый файл с именем «MyCamelCase.exe» в текущем каталоге скриптов Python и в подпапке «MyFolder».Кроме того, в «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 возвращает строку только с нижним регистром, еслиa предоставить полное имя файла и, с другой стороны, вернуть строку, содержащую исходную нотацию, при использовании шаблона с '. *'?Примечание: то же самое происходит при использовании Path.glob ()

1 Ответ

3 голосов
/ 03 июля 2019

Это потому, что все пути в Windows нечувствительны к регистру (фактически, до Windows 10 не было способа сделать Windows чувствительным к регистру).По какой-то причине при поиске точного соответствия pathlib делает путь строчным в Windows.Когда он выполняет обычную глобализацию с помощью *, он берет то, что нормальное представление происходит из Windows.

Корпус, не соответствующий в Windows, не должен иметь значения, и это не будет иметь значения, если единственным потребителем информации являетсясам компьютер, когда он обрабатывает файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...