Подтвердить что ты не робот

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

Я создаю приложение, которое хранит blob файлы на жестком диске, но этот script должен работать как в Linux, так и в Windows, проблема в том, что я хочу дать ему абсолютный путь от корня файловой системы, а не один по сравнению с файлами проекта, это потому, что im использует 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 в Windows), но я думаю, что проблема очень похожа.

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

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

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

4b9b3361

Ответ 1

Используйте 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, обычно находится каталог, в котором находится ваш script (при запуске из проводника Windows и при условии, что ваш script не изменяется Это). Если вы хотите заставить его всегда быть C:, вы можете сделать что-то вроде этого:

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

Ответ 3

Хорошо, я получил ответ сам.

os.path.exists(os.path.abspath(filePath))

Может быть, это будет полезно для всех