Я хотел бы построить абсолютный путь в Python, в то же время оставаясь в стороне от таких вещей, как разделитель пути.
edit0: например, есть каталог в корне моей файловой системы /etc/init.d
(или C:\etc\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 = ??? # <--
print "MYPATH:", os.path.join(root, 'etc', 'init.d')
MYPATH: /etc/init.d
edit2: вопрос действительно сводится к следующему: поскольку начальная косая черта в /etc/init.d
делает этот путь абсолютным путем, есть ли способ конструировать эту начальную косую черту программно? (Я не хочу делать предположения, что косая черта указывает на абсолютный путь)