1. ホーム
  2. python

Windows で os.path.join でスラッシュが混在している。

2023-08-15 01:30:28

質問

私はパス('/')にスラッシュのみを使用する傾向があり、pythonはWindows上でもそれで満足です。 os.path.joinの説明では、クロスプラットフォームにしたい場合、それが正しい方法であると言っています。しかし、私がそれを使用するとき、私は混合されたスラッシュを得る。

import os

a = 'c:/'
b = 'myFirstDirectory/'
c = 'mySecondDirectory'
d = 'myThirdDirectory'
e = 'myExecutable.exe'


print os.path.join(a, b, c, d, e)

# Result:
c:/myFirstDirectory/mySecondDirectory\myThirdDirectory\myExecutable.exe

これは正しいのでしょうか?後から確認して修正したほうがいいのか、それとももっといい方法があるのでしょうか?

ありがとうございます。

EDITです。 私はまた、パスを要求するときに混合スラッシュを取得します。

import sys
for item in sys.path:
    print item

# Result:
C:\Program Files\Autodesk\Maya2013.5\bin
C:\Program Files\Autodesk\Maya2013.5\mentalray\scripts\AETemplates
C:\Program Files\Autodesk\Maya2013.5\Python
C:\Program Files\Autodesk\Maya2013.5\Python\lib\site-packages
C:\Program Files\Autodesk\Maya2013.5\bin\python26.zip\lib-tk
C:/Users/nookie/Documents/maya/2013.5-x64/prefs/scripts
C:/Users/nookie/Documents/maya/2013.5-x64/scripts
C:/Users/nookie/Documents/maya/scripts
C:\Program Files\Nuke7.0v4\lib\site-packages
C:\Program Files\Nuke7.0v4/plugins/modules

どのように解決するのですか?

スラッシュのいくつかを自分で用意し、それを os.path.join に他のものを選ばせていることになります。Pythonに全部選ばせるか、自分で全部用意したほうがいいでしょう。Pythonはパスの後半部分にバックスラッシュを使用します。これはバックスラッシュがWindowsのデフォルトだからです。

import os

a = 'c:' # removed slash
b = 'myFirstDirectory' # removed slash
c = 'mySecondDirectory'
d = 'myThirdDirectory'
e = 'myExecutable.exe'

print os.path.join(a + os.sep, b, c, d, e)

テストしたわけではありませんが、参考になれば幸いです。 ベースパスがあり、他の1つの要素(ほとんどはファイル)だけを結合する必要がある方が一般的です。

ところで、あなたは os.sep は、python が動作しているオペレーティングシステムのための最良のセパレータを持ちたい場合に使用します。

編集します。 dash-tom-bangが言うように、どうやらWindowsではパスのルートにセパレータを含む必要があるようです。そうでなければ、絶対パスではなく相対パスを作成することになります。