Что вы ищете, это в конечном итоге поиск в вашей файловой системе. Это не очень хорошо, потому что очень вероятно, что у вас может быть несколько файлов с тем же именем, поэтому вы не будете знать с уверенностью, действительно ли первое совпадение - это тот файл, который вы хотите.
Я приведу вам пример того, как вы можете начать с чего-то простого, что позволит вам проходить через каталоги, чтобы иметь возможность искать.
Вам нужно будет указать какой-то базовый путь, чтобы иметь возможность инициировать поиск, который должен быть сделан для пути, где находится этот файл. Имейте в виду, что чем шире вы, тем дороже ваш поиск будет.
Вы можете сделать это с помощью метода os.walk.
Вот простой пример использования os.walk
. Что это делает собрать все пути к файлам с соответствующими именами файлов
Использование os.walk
from os import walk
from os.path import join
d = 'some_file.txt'
paths = []
for i in walk('/some/base_path'):
if d in i[2]:
paths.append(join(i[0], d))
Таким образом, для каждой итерации над os.walk вы собираетесь получить кортеж, который содержит:
(path, directories, files)
Поэтому я проверяю местоположение i[2]
, чтобы посмотреть файлы. Затем я присоединяюсь к i[0]
, который является путем, чтобы собрать полное имя пути к файлу.
Наконец, вы можете поместить код выше все в одной строке и сделать:
paths = [join(i[0], d) for i in walk('/some/base_path') if d in i[2]]
Это должно дать вам абсолютный путь, хотя для относительных путей было бы рассмотреть путь будучи относительно текущего каталога. Можете ли вы привести пример проблемы, которую вы видите? –
Я думаю, что OP хочет предоставить в качестве входного файла «foo.txt» и вернуть ему абсолютный путь, где этот файл находится в файловой системе. Это правильно @ I.A.S. – idjaw
Вы предоставляете подразумеваемый относительный путь и возвращаете абсолютный путь этого относительного пути. Можете ли вы уточнить, какие ожидаемые результаты? –