Интерпретировать путь с помощью * в Windows с помощью Python

Я пытаюсь найти полный реальный путь в Windows на основе пути с символом * в нем (который кажется чем-то похожим на регулярное выражение).

Например, если в консоли Windows я делаю:

cd C:\\Windows\\Program Files\\MySWv1*\\bin

указанный выше путь расширяется примерно так:

C:\\Windows\\Program Files\\MySWv1.90\\bin

и тогда команда cd выполняется успешно.

Однако, если в Python (2.7) я попытаюсь выполнить следующее:

import os
my_path = 'C:\\Windows\\Program Files\\MySWv1*\\bin'
os.path.exists(my_path)

Это возвращает False.

Как сделать так, чтобы приведенный выше скрипт возвращал True?


person Vito Gentile    schedule 01.08.2015    source источник
comment
Подстановочные знаки расширяются оболочкой, поэтому вы не можете использовать их с os.path.exists().   -  person Camron_Godbout    schedule 02.08.2015
comment
связанные stackoverflow.com/a/4296148/3896984   -  person Camron_Godbout    schedule 02.08.2015


Ответы (1)


Я нашел решение здесь. Он основан на модуле glob:

import os
import glob
my_path = glob.glob('C:\\Windows\\Program Files\\MySWv1*\\bin')[0]
os.path.exists(my_path)

Фактически, glob.glob интерпретирует путь и заменяет любые подстановочные знаки (например, *) с одной или несколькими строками, в результате чего получается список путей, которые им соответствуют.

Это означает, что в производственном коде вы всегда должны учитывать возможность того, что glob.glob создает более одного пути, и, при необходимости, что-то делать для управления этим правилом.

person Vito Gentile    schedule 01.08.2015
comment
Результатом glob является список, и если список непуст, элементы наверняка существовали в то время. В многопоточной ОС нет гарантии, что они все еще существуют. Лучше всего попробовать операцию и обработать исключение. - person Eryk Sun; 02.08.2015