2013-02-20 5 views
3

os.path.join Python был described as "mostly pointless", потому что он отбрасывает любые аргументы до одного, содержащего ведущую косую черту. Оставляя в стороне на данный момент, что это преднамеренное и задокументированное поведение, есть ли доступная функция или шаблон кода, который не отбрасывается так?os.path.join(), который не отбрасывает перед началом косой черты?

Учитывая HOMEPATH=\users\myname следующее отбросит начало пути

print os.path.join('C:\one', os.environ.get("HOMEPATH"), 'three') 

результат:

\Users\myname\three 

желательно:

C:\one\Users\myname\three 

Будучи укусила этого несколько раз, Я довольно хорошо заметил замечательную косую черту, когда это то, что я написал , но как насчет того, когда, когда вы не знаете, как выглядит входящая строка, как в этом примере?

+5

Я сожалею, что это укусил вас несколько раз, но это * * намеренное и документированная особенность. –

+4

Это абсолютно намеренно. Он предназначен для объединения путей с путями; если один путь оказывается абсолютным (начинается с косой черты), он будет рассматриваться как таковой. Здесь ничего не сломано, кроме вашего понимания. – nneonneo

+2

Документы дают понять, что это преднамеренное поведение, но при условии, что комментарий «в основном бессмысленный», который я заимствовал из связанного ответа, был увеличен 14 или более раз, я, конечно, не одинок, думая, что должна быть альтернатива. –

ответ

6

Возможно, os.environ.get("HOMEPATH").lstrip(os.path.sep) ... было бы тривиально написать собственную версию join, которая сделала это на каждом аргументе (или на втором и последующих).

+1

Я не копировал ваш ответ ;-) Просто набрав его по телефону, потребовалось больше времени. – jdi

3

Просто полоса слэш

path = os.environ.get("HOMEPATH").lstrip(os.path.sep) 
os.path.join('C:\one', path, 'three')