построение абсолютного пути с помощью os.path.join ()

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

edit0: например, есть каталог в корне моей файловой системы /etc/init.d (или C:\etc\init.d init.d на w32), и я хочу построить это только из элементов и etc и init.d ( на w32, мне, вероятно, также нужен идентификатор диска, например C: 🙂

Для того, чтобы не беспокоиться о разделителях пути, os.join.path() , очевидно, является инструментом выбора. Но кажется, что это только создаст относительные пути:

  print "MYPATH:", os.path.join('etc', 'init.d') MYPATH: etc/init.d 

Добавление фиктивного первого элемента (например, '' ) ничего не помогает:

  print "MYPATH:", os.path.join('', 'etc', 'init.d') MYPATH: etc/init.d 

Очевидно, что создание первого элемента абсолютно помогает, но этот вид побеждает идею использования os.path.join()

  print "MYPATH:", os.path.join('/etc', 'init.d') MYPATH: /etc/init.d 

edit1: использование os.path.abspath() будет пытаться преобразовать относительный путь в абсолютный путь. например, запустите в рабочем каталоге /home/foo :

  print "MYPATH:", os.path.abspath(os.path.join('etc', 'init.d')) MYPATH: /home/foo/etc/init.d 

Итак, каков стандартный кросс-платформенный способ «root» пути?

  root = ??? # <-- print "MYPATH:", os.path.join(root, 'etc', 'init.d') MYPATH: /etc/init.d 

edit2: вопрос действительно сводится к следующему: поскольку конечная косая черта в /etc/init.d делает этот путь абсолютным путем, есть ли способ создать эту конечную косую черту программным путем? (Я не хочу делать предположения, что конечная косая черта указывает абсолютный путь)

5 Solutions collect form web for “построение абсолютного пути с помощью os.path.join ()”

Использование os.sep качестве root работало для меня:

 path.join(os.sep, 'python', 'bin') 

Linux: /python/bin

Windows: \python\bin

Добавление path.abspath() в микс даст вам буквы дисков в Windows и по-прежнему совместимы с Linux:

 path.abspath(path.join(os.sep, 'python', 'bin')) 

Linux: /python/bin

Windows: C:\python\bin

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

 def getRoot(file=None): if file is None: file='.' me=os.path.abspath(file) drive,path=os.path.splitdrive(me) while 1: path,folder=os.path.split(path) if not folder: break return drive+path os.path.join(getRoot(), 'etc', 'init.d') 

Таким образом, вы можете сделать чек для запуска os sys.platfrom

на окнах

 >>> sys.platform 'win32' 

на linux

 >>> sys.platform 'linux2' 

тогда

 if sys.platform == 'win32': ROOT = os.path.splitdrive(os.path.abspath('.'))[0] elif sys.platform == 'linux2': ROOT = os.sep 

Обратите внимание, что «linux2» может не охватывать все дистрибутивы Linux

Я думаю, вы можете использовать os.path.normpath . Вот что я получаю в Windows:

 >>> os.path.normpath("/etc/init.d") '\\etc\\init.d' 

Я не уверен, что правильная вещь с префиксом привода есть, но я думаю, что отказ от этого означает что-то вроде «продолжайте использовать диск, на котором я сейчас», что, вероятно, вы хотите. Может быть, кто-то более знакомый с Windows может прояснить?

вы можете попробовать с os.path.splitdrive получить имя вашего диска / файловой системы, а затем присоединиться к этому с помощью вашей строки foo .

http://docs.python.org/2/library/os.path.html#os.path.splitdrive

что-то вроде (непроверенный!)

 (drive, tail) = os.path.splitdrive(os.getcwd()) os.path.join(drive, 'foo') 

должен сделать трюк.

  • Для чего полезен __path__?
  • Выйти из каталога путей прямой косой черты в Mac OSX с помощью Python?
  • установить pythonpath перед операциями импорта
  • Python не может найти мой модуль
  • Будет ли настоящий путь.py, пожалуйста, встаньте?
  • Является ли заказ сообщенным «sys.path» порядком поиска пакетов?
  • Разрешение относительного пути к абсолютному пути
  • Сделать подпроцессом find git исполняемым в Windows
  • Пути Unix: официально работайте в Python для любой платформы?
  • Зачем использовать sys.path.append (путь) вместо sys.path.insert (1, path)?
  • Не удается найти файл, указанный при использовании subprocess.call ('dir', shell = True) в Python
  •  
    Interesting Posts for Van-Lav

    Ошибки игры «Жизнь» выполнены неправильно

    Как хэш * args ** kwargs для кеша функции?

    Библиотека запросов Python перенаправляет новый URL-адрес

    хэш-функция в Python 3.3 возвращает разные результаты между сеансами

    зацикливание некоторого ips из файла в python?

    Проблемы PATH с установленными на домашнем компьютере Python 2 и Python 3 на OSX

    Вопрос о уникальности экземпляра строки в python

    Есть ли способ разместить сайт django в режиме обслуживания с использованием ткани?

    Как я могу превратить список в массив в python?

    Устранение неполадок Websockets с EC2 на AWS с использованием Django

    Типы данных Pandas изменяются при итерации по большой оси

    Python * .py, * .pyo, * .pyc: что можно устранить для встроенной системы?

    Python: как перехватить вызов метода, который не существует?

    Как развернуть приложение Python с библиотеками в качестве источника без каких-либо дополнительных зависимостей?

    Внешние запросы Django

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