2

os.path.dirname現在、なぜpythonがそのように動作するのかわかりません。

次のスクリプトがあるとします。

# Not part of the script, just for the current sample
__file__ = 'C:\\Python\\Test\\test.py'

次に、次のディレクトリへの絶対パスを取得しようとします。C:\\Python\\doc\\py

このコードで:

base_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)) + '\\..\\doc\\py\\')

しかし、なぜメソッドos.path.dirnameはパスを解決せず、出力 ( print (base_path):

C:\Python\Test\..\doc\py

メソッドがパスを次のように解決することを期待していました。

C:\Python\Test\doc\py

ディレクトリ パスを取得すると、常に完全なパスが解決され、ディレクトリの変更が削除され..\\ます。これを行う可能性のためにPythonで何を持っていますか?

4

2 に答える 2

3

調べるos.path.normpath

A//B、A/B/、A/./B、および A/foo/../B がすべて A/B になるように、冗長な区切り文字と上位レベルの参照を折りたたんでパス名を正規化します。この文字列操作により、シンボリック リンクを含むパスの意味が変わる場合があります。Windows では、スラッシュをバックスラッシュに変換します。

このように機能する理由os.path.dirnameは、あまりスマートではないためです。URL に対しても機能します。

os.path.dirname("http://www.google.com/test")  # outputs http://www.google.com

最後のスラッシュの後にあるものを切り落とすだけです。最後のスラッシュの前は何も見ていないので、/../どこかにあるかどうかは気にしません。

于 2015-12-28T07:42:39.193 に答える
2

os.path.normpath()現在のディレクトリまたは親ディレクトリへのすべての参照が削除または適切に置き換えられた、正規化されたパスを返します。

于 2015-12-28T07:41:41.090 に答える