検索

ホームページ  >  に質問  >  本文

filesystem - Python 获取文件路径及文件目录

我正在学习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__))性质是否一样呢?

PHP中文网PHP中文网2889日前440

全員に返信(1)返信します

  • 迷茫

    迷茫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__)) の結果是這麼來的:

    リーリー

    希望講到這裡有讓你明白!

    結論

    それでは質問に簡単に答えてください

    1. dirname が空白なのはなぜですか?

      • 実行時に単純な名前を付けたため、__file__ は単純な名前であり、パスではありません

    2. 括弧内のファイルが相対パスで実行されているか絶対パスで実行されているかを確認するにはどうすればよいですか?

      • これは非常に簡単ですが、Python の実行方法によって異なります

    3. 以下のサンプル スクリプトを実行すると、このファイルが相対パスで実行されるのはなぜですか?

      • $ python 1.py が相対パスを自分で指定したため

    4. os.path.abspath(os.path.dirname(__file__))os.path.dirname(os.path.abspath(__file__)) は同じプロパティを持っていますか?

      • 基本的に同じ


    私が回答した質問: Python-QA

    返事
    0
  • キャンセル返事