Python - Любой способ превратить относительные пути в абсолютные пути? - PullRequest
3 голосов
/ 21 февраля 2012
current_working_directory = os.getcwd()
relative_directory_of_interest = os.path.join(current_working_directory,"../code/framework/zwave/metadata/")

files = [f for f in os.listdir(relative_directory_of_interest) if os.path.isfile(os.path.join(relative_directory_of_interest,f))]

for f in files:
    print(os.path.join(relative_directory_of_interest,f))

Выход:

/Users/2Gig/Development/feature_dev/scripts/../code/framework/zwave/metadata/bar.xml
/Users/2Gig/Development/feature_dev/scripts/../code/framework/zwave/metadata/baz.xml
/Users/2Gig/Development/feature_dev/scripts/../code/framework/zwave/metadata/foo.xml

Эти пути к файлам работают нормально, но часть меня хотела бы, чтобы это были абсолютные пути (без каких-либо ../ - Я не знаю, почему меня это волнует, может быть, я ОКР. Думаю, мне тоже легче ведение журнала, чтобы увидеть абсолютные пути. Есть ли что-то встроенное в стандартные библиотеки Python (я на 3.2), которое могло бы превратить их в абсолютные пути? Ничего страшного, если нет, но небольшое прибегание к поиску только повлекло за собой решения третьей части. *

РЕДАКТИРОВАТЬ: Похоже, что я хочу, что os.path.abspath (файл)) Таким образом, вышеупомянутый измененный источник теперь может выглядеть (не то, что я не проверял это, это просто не так):

current_working_directory = os.getcwd()
relative_directory_of_interest = os.path.join(current_working_directory,"../code/framework/zwave/metadata/")

files = [f for f in os.listdir(relative_directory_of_interest) if os.path.isfile(os.path.join(relative_directory_of_interest,f))]

for f in files:
    print(os.path.abspath(f))

Выход:

/ Users / 2Gig / Development / feature_dev / scripts / ZWave_custom_cmd_classes (08262010) .xml / Users / 2Gig / Development / feature_dev / scripts / ZWave_custom_cmd_classes (09262010) .xml / Users / 2Gig / Development / feature_dev / scripts / ZWave_custom_cmd_classes (09262011) .xml

1 Ответ

10 голосов
/ 21 февраля 2012

Обратите внимание, что ваши пути уже уже абсолютны - они начинаются с /. Однако они не нормализованы , что можно сделать с помощью os.path.normpath().

...