Использование абсолютных путей unix в windows с python

Я создаю приложение, которое хранит blob-файлы на жестком диске, но этот скрипт должен работать как в Linux, так и в Windows, проблема в том, что я хочу дать ему абсолютный путь от корня файловой системы, а не по отношению к файлам проекта , это потому, что я использую git и не хочу иметь дело с исключением всех этих файлов из синхронизации.

Поэтому я хотел бы иметь что-то вроде этого:

path = '/var/lib/blob_files/' file = open(path+'myfile.blob', 'w') 

и получить файл в unix по адресу:

 /var/lib/blob_files/myfile.blob 

и в окнах:

 C:\var\lib\blob_files\myfile.blob 

он также может относиться к домашней папке пользователя (/ home / user в unix и C: / Users / User в окнах), но я думаю, что проблема очень похожа.

Как я могу достичь этого? есть ли какая-либо библиотека или функция, которые могут помочь мне прозрачно преобразовывать эти пути, не спрашивая, в каком платине работает скрипт?

Из моих двух вариантов, абсолютных от корня или родственника из домашней папки, которую вы рекомендуете использовать?

Заранее благодарим за любые советы по этому поводу.

2 Solutions collect form web for “Использование абсолютных путей unix в windows с python”

Используйте os.path.abspath() , а также os.path.expanduser() для файлов, относящихся к домашнему каталогу пользователя:

 print os.path.abspath("/var/lib/blob_files/myfile.blob") >>> C:\var\lib\blob_files\myfile.blob print os.path.abspath(os.path.expanduser("~/blob_files/myfile.blob")) >>> C:\Users\jerry\blob_files\myfile.blob 

Они будут «делать правильные вещи» для путей Windows и POSIX.

expanduser() не изменит путь, если в нем нет ~ , поэтому вы можете безопасно использовать его со всеми путями. Таким образом, вы можете легко написать функцию обертки:

 import os def fixpath(path): return os.path.abspath(os.path.expanduser(path)) 

Обратите внимание, что используемая буква диска будет диском, указанным текущим рабочим каталогом процесса Python, обычно это каталог, в котором находится ваш скрипт (если он запускается из проводника Windows, и если ваш скрипт не изменит его). Если вы хотите заставить его всегда быть C: вы можете сделать что-то вроде этого:

 import os def fixpath(path): path = os.path.normpath(os.path.expanduser(path)) if path.startswith("\\"): return "C:" + path return path 

От ответа Blenders на пути к независимым от платформы файлам?

 >>> import os >>> os.path.join('app', 'subdir', 'dir', 'filename.foo') 'app/subdir/dir/filename.foo' 
Python - лучший язык программирования в мире.