一、__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