python3.7之__file__, os.path.dirname與os.path.abspath辨析


一、__file__屬性

python執行py文件的時候,默認就會把當前目錄增加到sys.path系統路徑中。

pycharm中直接執行(注:我這里亂七八糟的.py是一個文件夾名)

print(__file__)  # 打印文件當前的位置(絕對路徑)
'''
/Users/xiexinran/Desktop/亂七八糟的.py/practice8.py
Process finished with exit code 0
'''

終端切換到目錄執行

結果顯示當前文件。上面pycharm里面會打印出絕對路徑,這是pyharm自己增加的,終端里面是不會有

終端使用絕對路徑執行

結果顯示當前文件的絕對路徑(也就是說我提供了路徑,所以__file__能找到我執行的路徑)

二、os.path.dirname

pycharm中執行

import os
print(os.path.dirname(__file__))  # 打印當前文件所在的目錄

'''
/Users/xiexinran/Desktop/亂七八糟的.py
Process finished with exit code 0
'''

終端執行

可以看出不輸入路徑直接執行,終端報錯,必須輸入絕對路徑后執行,才會顯示該上層目錄

三、os.path.abspath

pycharm中執行

import os
# 當前文件的系統絕對路徑,往往用於添加到環境變量BASE_DIR
print(os.path.abspath(__file__))
'''
/Users/xiexinran/Desktop/亂七八糟的.py/practice8.py
Process finished with exit code 0
'''

終端執行

可以看出終端執行不帶路徑則會報錯。

如果我們加系統變量路徑,推薦使用這種方法。當前文件執行的目錄的路徑就加入到python路徑里面,后面不管你目錄移動到什么位置,里面的文件都能執行

import sys
import os
BASH_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(BASH_DIR)

四、對比運行結果

import os
# 當前文件的絕對路徑,包括文件名
print(__file__)
# 當前文件的系統絕對路徑,往往用於添加到環境變量BASE_DIR
print(os.path.abspath(__file__))
# 當前文件所在的目錄
print(os.path.dirname(__file__))
# 文件所在目錄的上一級目錄
print(os.path.dirname(os.path.dirname(__file__)))
# 當前文件所在的目錄
print(os.path.dirname(os.path.abspath(__file__)))

運行結果:

/Users/xiexinran/Desktop/亂七八糟的.py/practice8.py
/Users/xiexinran/Desktop/亂七八糟的.py/practice8.py
/Users/xiexinran/Desktop/亂七八糟的.py
/Users/xiexinran/Desktop
/Users/xiexinran/Desktop/亂七八糟的.py

Process finished with exit code 0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM