Использование абсолютных путей 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 копирует DLL на сайт-пакеты в Windows
  • как запустить exe-файл с помощью аргументов с помощью python
  • Каков наилучший способ сопоставления дисков Windows с помощью Python?
  • Как определить, является ли файл исполняемым в Windows на Python?
  • Python - получить IP-адрес компьютера и имя хоста в сети с использованием того же приложения
  • Передача аргументов с помощью подстановочных знаков в скрипт Python
  • Получение MAC-адреса
  • Python 2.7 на Windows, «assert main_name не в sys.modules, main_name» для всех примеров многопроцессорности
  • Программа Python работает в IDLE, но не в командной строке
  • Python (pip) бросает , даже если обновлена ​​цепочка сертификатов
  • «Невозможно открыть файл include:« config-win.h »: нет такого файла или каталога» при установке mysql-python
  •  
    Interesting Posts for Van-Lav

    Самый эффективный способ поиска соседей в списке

    Что такое хороший, надежный короткий способ получить кодировку веб-страницы?

    Улучшение алгоритма решения Minesweeper

    Pythonic способ проверить, выполняется ли условие для любого элемента списка

    Остановить Сципы до минимума после установленного времени

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

    Невозможно установить psycopg2 с помощью pip в virtualenv на Mac OS X 10.7

    Numpy / Python: эффективная матрица как умножение декартова произведения входной матрицы

    Фрагменты функционального программирования Python

    флаг авто-повтора в строке формата пакета

    Объединение вложенных элементов списка на основе повторяющегося значения

    Firefox, начатый Selenium, игнорирует отображение, созданное pyvirtualdisplay

    Проблема с python / pytz Преобразование из локального часового пояса в UTC, затем обратно

    использование или API tf.app.flags

    Caffe net.predict () выводит случайные результаты (GoogleNet)

    Python - лучший язык программирования в мире.