6

Python で Windows 用のコマンドライン ディレクトリ ナビゲーターを作成していて、os.path.join で少し苦労しています。本質的に、私がやろうとしていることは次のとおりです。

abspath = "C:\Python32\Projects\ls.py"
abspath = abspath.split('\\')
print(abspath) #this prints ['C:', 'Python32', 'Projects', 'ls.py']

if(options.mFlag):  
        print(os.path.join(*abspath)) #this prints C:Python32\Projects\ls.py
        m = time.ctime(os.path.getmtime(os.path.join(*abspath))) #this throws an exception

問題は、os.path.join が「C:」の後に「/」を挿入していないことであり、その理由がわかりません。何か助けはありますか?

編集:将来誰かが解決策を探してここに来る場合に備えて、バックスラッシュをハードコーディングする代わりに「C:」の後に os.sep を追加しただけでうまくいきました。

4

2 に答える 2

6

ドキュメントから:

Windows では、ドライブごとに現在のディレクトリがあるためos.path.join("c:", "foo")、 は c:\foo ではなく、ドライブ C: (c:foo) の現在のディレクトリからの相対パスを表すことに注意してください。

あなたのコードはパスを分割して元通りに戻すことを目指しているように見えるので、何を達成しようとしているのかを伝えるのは少し難しいです。 ? しかし、多分os.path.splitdriveあなたを助けるでしょうか?ドライブ文字をパスから分割します。

于 2012-11-19T19:39:29.240 に答える
3

ドキュメント ( http://docs.python.org/2/library/os.path.html ) では、この動作が指定されています。

Windows では、ドライブごとに現在のディレクトリがあるため、os.path.join("c:", "foo") はドライブ C: (c:foo) の現在のディレクトリからの相対パスを表し、c ではありません。 :\フー。

于 2012-11-19T19:38:48.787 に答える