搜尋

首頁  >  問答  >  主體

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 天前450

全部回覆(1)我來回復

  • 迷茫

    迷茫2017-04-18 09:19:06

    建議你稍微瀏覽一下Python doc:os.path,你就會理解囉:

    我放上重慶相關的幾個入境問題:

    • os.path.abspath(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)

      • 返回pathname路徑的目錄名稱。這是透過將路徑傳遞給函數 split() 傳回的對的第一個元素。

    • os.path.split(path)

      • 將路徑名路徑分成一對,(頭,尾),其中尾部是最後一個路徑名組件,頭是導致它的所有內容。尾部永遠不會包含斜線;如果路徑以斜線結尾,則 tail 將為空。如果路徑中沒有斜杠,則 head 將為空。如果路徑為空,則頭部和尾部都為空。尾部斜線將從頭部剝離,除非它是根(僅一個或多個斜線)。在所有情況下, join(head, tail) 傳回與 path 相同位置的路徑(但字串可能不同)。另請參閱函數 dirname() 和 basename()。

    我們做以下觀察:

    test.py

    雷雷

    運行:

    雷雷

    結果:

    雷雷

    首先__file__的值其實就是在命令列上呼叫Python時給的腳本名稱:

    雷雷

    在這裡,因為 __file__ 的值為 test.py, 所以 print(__file__) 的結果是 test.py 的值是

    ,所以 print(__file__) 的結果是

    也不意外了。 os.path.dirname(__file__)之所以得出空白(空字串), 是因為 __file__ 就只是一個單純的名稱(非路徑) 且 dirname 也只是很單純的利用 os.path.split()

    連接,os.path.dirname(__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
  • 取消回覆