使用os.path.abspath()函數來獲取文件絕對路徑
解析文件目錄結構如下:
假設app.py中想讀取config.ini文件的內容,首先app.py需要知道config.ini的文件路徑,從目錄結構上可以看出,config.ini與app.py的父目錄同級,也就是獲取到app.py父目錄(bin文件夾的路徑)的父目錄(config文件夾路徑)的絕對路徑再拼上config.ini文件名就能獲取到config.ini文件:
首先,在app.py中測試壹下:
import os
def load_file():
# 獲取當前文件路徑
current_path = os.path.abspath(__file__)
# 獲取當前文件的父目錄
father_path = os.path.abspath(os.path.dirname(current_path) + os.path.sep + ".")
# config.ini文件路徑,獲取當前目錄的父目錄的父目錄與congig.ini拼接
config_file_path=os.path.join(os.path.abspath(os.path.dirname(current_path) + os.path.sep + ".."),'config.ini')
print('當前目錄:' + current_path)
print('當前父目錄:' + father_path)
print('config.ini路徑:' + config_file_path)
load_file()
#out:
從結果中可以看到壹切都正常,沒有什麽問題,假如現在需要從main.py中執行app.py的load_file()方法呢?
來測試壹下:
main.py(處於同級目錄):
from bin.app import load_file
if __name__=='__main__':
load_file()
#out:
可以看到,獲取的路徑是完全沒有問題的
拓展內容python os.path 常用模塊介紹
os.path.abspath(path)?返回path規範化的絕對路徑(但這個路徑不壹定是真實的路徑),如果path僅是壹個文件名,使用該函數後返回的路徑是當前工作目錄路徑連接改文件名後所組成的新的路徑名。
>>> import os.path
>>> os.path.abspath("a.py")
'C:\\Users\\Administrator\\a.py'
os.path.split(path)?將path分割成目錄和文件名二元組返回
>>> os.path.split("C:\\Users\\Administrator\\a.py")
('C:\\Users\\Administrator', 'a.py')
os.path.dirname(path)?返回path的目錄,其實就是os.path.split(path)的第壹個元素
>>> os.path.dirname("C:\\Users\\Administrator\\a.py")
'C:\\Users\\Administrator'
os.path.basename(path)?返回path最後的文件名。如果path以/或\結尾,就會返回空值。即os.path.split(path)的第二個元素。
>>> os.path.basename("C:\\Users\\Administrator\\a.py")
'a.py'
os.path.commonprefix(list)?返回list中所有path***有的最長的路徑,從左向右,相同字符。
os.path.exists(path)?如果path存在,返回True;如果path不存在,返回False。
os.path.isabs(path)?如果path是絕對路徑,返回True。
os.path.normpath(path)?規範path字符串形式(規範文件路徑)
os.path.isfile(path)?判斷路徑是否為文件,是返回True,否則返回False
os.path.isdir(path)?如果path是壹個存在的目錄,返回True,否則返貨False。
os.path.islink(path)?是否是鏈接;但如果系統不支持鏈接,則返回False。