поиск абсолютного пути из относительного пути в python

#python #search #path

#python #Поиск #путь

Вопрос:

мой вопрос в значительной степени соответствует названию. мои исследования привели меня к тому, чтобы попробовать что-то вроде этого:

 import os
pathname = os.path.abspath("some/relative/directory")
print pathname
 

эта проблема заключается в том, что всякий раз, когда я делаю что-то подобное, он просто возвращает любой относительный каталог, который я дал, которому предшествовал мой каталог python. например:

C:Python27somerelativedirectory

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

цель этого для меня — создать exe-файл (используя py2exe), который может искать произвольный каталог на любом компьютере. есть ли способ сделать это в стандартной библиотеке или через какой-либо доступный модуль — или мне придется самому реализовать алгоритм?

Комментарии:

1. Вы имеете в виду, что хотите выполнить поиск по всему жесткому диску для поиска пути, который выглядит так? Или что?

Ответ №1:

abspath основан на getcwd . Скорее всего, ваш текущий рабочий каталог просто не соответствует вашим ожиданиям.

Вы можете изменить код, который запускает ваш скрипт, изменить каталоги вручную или просто использовать chdir в Python.

Комментарии:

1. @Ben, no abspath не делает ничего подобного. Такие алгоритмы сложнее, чем вы думаете. Например, какой алгоритм обхода дерева вы используете, что вы делаете, если есть более одного совпадения, и что произойдет, если файловая система изменится во время поиска?

2. хм, я довольно новичок в python, но я надеялся, что в каком-то модуле будет существующий алгоритм… — есть ли простой способ вернуть первое найденное совпадение?

3. @Ben, тебе следует отредактировать свой вопрос и добавить что-то похожее на комментарий, который ты удалил.

Ответ №2:

Вы пробовали os.path.realpath("my/relative/dir") ? На самом деле кажется, что каталог может не существовать, но если он существует, он разрешит символические ссылки и еще много чего.

Комментарии:

1. я тоже пробовал это, но он все равно просто возвращает C:Python27myrelativedir — в основном C:Python27 любая строка, которую я передаю.