поиск файла с символами юникода с помощью Path.glob в python3 в OSX - PullRequest
2 голосов
/ 06 февраля 2020

Как мне найти имя файла, начинающееся с "dec2?file", которое имеет расширение для OSX?

В моем случае у меня есть только один файл .ppt в каталоге Documents. Итак, результат должен быть: dec2?file.ppt

Вот код:

my_pathname='Documents'
my_filename='dec2?file'
my_glob = "{c}.{ext}".format(c=my_filename, ext='*')
try:
  my_filename = str(list(pathlib.Path(my_pathname).glob(my_glob))[0])
except Exception as ex:
  print("Error - {d}/{f} - {e}".format(d=my_pathname, f=my_glob, e=str(ex)))
  exit(1)
print("Found it - {f}".format(f=my_filename))

Текущий результат:

ERROR - Documents/dec2?file.* - list index out of range

Как мне его получить найдите файл и напечатайте:

Found it - dec2?file.ppt

1 Ответ

1 голос
/ 07 февраля 2020

После создания папки с именем test и файла внутри нее с именем dec2?file.txt я запустил это:

import pathlib

my_pathname = 'test'
my_filename = 'dec2?file'
my_glob = "{c}.{ext}".format(c=my_filename, ext='*')

try:
    my_filename = str(list(pathlib.Path(my_pathname).glob(my_glob))[0])
except Exception as ex:
    print("Error - {d}/{f} - {e}".format(d=my_pathname, f=my_glob, e=str(ex)))
    exit(1)


print("Found it - {f}".format(f=my_filename))

И получил:

Found it - test\dec2?file.txt

Итак, я могу только заключить, что в рабочем каталоге, где работает ваш скрипт, нет папки с именем Documents. Попробуйте заменить my_pathname на полное имя пути или убедитесь, что ваш сценарий выполняется в родительском каталоге Documents.

Это можно сделать, либо изменив рабочий каталог сценария из вашей IDE, либо в командной строки, или с помощью os.chdir или чего-то подобного, чтобы изменить каталог перед соответствующей частью сценария.

...