Globbing Абсолютные Пути С Pathlib - PullRequest
0 голосов
/ 26 мая 2019

В python3 при работе с неизвестными (вводимыми пользователем) путями к файлам мне нужно поддерживать символы подстановки, такие как ./r*/*.dat. План состоял в том, чтобы использовать что-то вроде этого (упрощенно):

paths = []
for test in userinputs:
   paths.extend(pathlib.Path().glob(test))

Это прекрасно работает для относительных путей; однако, когда пользователь указывает абсолютный путь (что ему следует разрешить делать), код завершается ошибкой:

NotImplementedError: Non-relative patterns are unsupported

Если это «простой» шар, такой как /usr/bin/*, я могу сделать что-то вроде:

test = pathlib.Path("/usr/bin/*")
sources.extend(test.parent.glob(test.name))

Однако, как и в первом примере с моим путем, мне нужно учитывать подстановочные знаки в любых частях пути, таких как /usr/b*/*.

Есть ли элегантное решение для этого? Я чувствую, что упускаю что-то очевидное.

1 Ответ

1 голос
/ 26 мая 2019

Path() принимает параметр для его начального dir.
Почему бы не проверить входные данные, чтобы определить абсолютный путь, а затем инициализировать Path() в качестве корневого каталога? что-то вроде:

for test in userinputs:
    if test[0] == '/':
        paths.extend(pathlib.Path('/').glob(test[1:]))
    else:
        paths.extend(pathlib.Path().glob(test))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...