Pythonで絶対パスを構築したいと同時に、パスセパレーターのようなものをかなり無視したままにします。
edit0:たとえば、ファイル システムのルート/etc/init.d
(またはw32) にディレクトリがあり、要素と(w32 では、おそらく のようなディスク ID も必要です)C:\etc\init.d
からのみこれを構築したいと考えています。etc
init.d
C:
パスセパレーターについて心配する必要がないようにするために、os.join.path()
明らかに最適なツールです。しかし、これは相対パスのみを作成するようです:
print("MYPATH: %s" % (os.path.join('etc', 'init.d'),)
MYPATH: etc/init.d
ダミーの最初の要素 (例: ''
) を追加しても何の役にも立たない:
print("MYPATH: %s" % (os.path.join('', 'etc', 'init.d'),)
MYPATH: etc/init.d
最初の要素を絶対にすることは明らかに役立ちますが、この種の要素を使用するという考えは無効になりますos.path.join()
print("MYPATH: %s" % (os.path.join('/etc', 'init.d'),)
MYPATH: /etc/init.d
edit1:を使用os.path.abspath()
すると、相対パスを絶対パスに変換しようとするだけです。たとえば、作業ディレクトリで次を実行することを検討して/home/foo
ください。
print("MYPATH: %s" % (os.path.abspath(os.path.join('etc', 'init.d')),)
MYPATH: /home/foo/etc/init.d
では、パスを「ルート化」するための標準的なクロスプラットフォームの方法は何ですか?
root = ??? # <--
print("MYPATH: %s" % (os.path.join(root, 'etc', 'init.d'),)
MYPATH: /etc/init.d
edit2:質問は本当に次のように要約されます: 先頭のスラッシュ/etc/init.d
がこのパスを絶対パスにするため、この先頭のスラッシュをプログラムで構築する方法はありますか? (先頭のスラッシュが絶対パスを示していると仮定したくありません)