我正在学习Python,不过遇到一些问题,想请教
OS模块中的os.path.dirname(__file__)和os.path.abspath(__file__)
运行os.path.dirname(__file__)时候,为什么返回的是空白呢?是不是因为他运行的是相对路径???
如果是的话:
1:我怎么能够知道,括号内的文件是以相对路径还是绝对路径被运行的?
2:为什么我运行下面例子脚本的时候,这个文件是以相对路径被运行的呢?
比如我下面的例子
import os
print (os.path.dirname(__file__))
print (os.path.abspath(__file__))
print (os.path.abspath(os.path.dirname(__file__)))
print (os.path.dirname(os.path.abspath(__file__)))
PS:附加问题
os.path.abspath(os.path.dirname(__file__))和os.path.dirname(os.path.abspath(__file__))性质是否一样呢?
迷茫2017-04-18 09:19:06
建議你可以稍微瀏覽一下 Python doc: os.path, 你就會明白囉:
我放上跟你問題相關的幾個條目:
os.path.abspath(path)
パス名 path の正規化された絶対化バージョンを返します。ほとんどのプラットフォームでは、これは関数 Normpath() を次のように呼び出すことと同じです: Normpath(join(os.getcwd(), path)).
os.path.normpath(path)
A//B、A/B/、A/./B、および A/foo/../B がすべて A になるように、冗長な区切り文字と上位の参照を折りたたんでパス名を正規化します。 /B.この文字列操作により、シンボリック リンクを含むパスの意味が変更される可能性があります。 Windows では、スラッシュがバックスラッシュに変換されます。大文字と小文字を正規化するには、normcase() を使用します。
os.path.dirname(path)
パス名 path のディレクトリ名を返します。これは、関数 split() にパスを渡すことによって返されるペアの最初の要素です。
os.path.split(path)
パス名パスをペア (head、tail) に分割します。tail は最後のパス名コンポーネントであり、head はそこに至るまでのすべてです。末尾の部分にスラッシュが含まれることはありません。パスがスラッシュで終わる場合、末尾は空になります。パスにスラッシュがない場合、head は空になります。パスが空の場合、先頭と末尾の両方が空になります。末尾のスラッシュは、ルート (1 つ以上のスラッシュのみ) でない限り、先頭から削除されます。すべての場合において、join(head, tail) は path と同じ場所へのパスを返します (ただし、文字列は異なる場合があります)。関数 dirname() および Basename() も参照してください。
私は以下の見解:
test.py
曜日:
リーリー結果:
リーリー最初 __file__
の值その實は、コマンド列上で Python 許可のスクリプト名を呼び出します:
在這裡, 因為 __file__
的值為 test.py
, 所以 print(__file__)
的結果是 test.py
也就不意外了。
接著, os.path.dirname(__file__)
之所以得出空白(空字串), 是因為 __file__
就只是一個單純的名稱(非路徑) かつ dirname
也只是很單的利用 os.path.split()
來切割這個名稱(這當然沒甚麼好切的, 連路徑分割符都沒有):
我分會發現切出來的 head
は空字串、所以 dirname
の結果は空白です。
abspath
動用了 os.getcwd()
所以即便給定的是單純的名稱, 也能返回路徑:
しかし os.path.abspath(os.path.dirname(__file__))
的結果就等於是 os.getcwd()
的結果去接上 dirname
得られた空字列:
最後、os.path.dirname(os.path.abspath(__file__))
の結果是這麼來的:
希望講到這裡有讓你明白!
それでは質問に簡単に答えてください
dirname
が空白なのはなぜですか?
実行時に単純な名前を付けたため、__file__
は単純な名前であり、パスではありません
括弧内のファイルが相対パスで実行されているか絶対パスで実行されているかを確認するにはどうすればよいですか?
これは非常に簡単ですが、Python の実行方法によって異なります
以下のサンプル スクリプトを実行すると、このファイルが相対パスで実行されるのはなぜですか?
$ python 1.py
が相対パスを自分で指定したため
os.path.abspath(os.path.dirname(__file__))
と os.path.dirname(os.path.abspath(__file__))
は同じプロパティを持っていますか?
基本的に同じ
私が回答した質問: Python-QA