拋出問題:
當我們部署我們的代碼的時候,會遇到一種情況,之前在配置文件中所有的文件路徑都寫成了絕對路徑,基于你個人筆記本操作系統的用戶路徑,這樣的話,當更換了其他電腦的時候,這個路徑是無法復用的,所以產生了一個想法,利用os.path模塊獲取當前文件所處的父目錄的絕對路徑(其實就是你項目根目錄的絕對路徑),然后在配置文件中只需要寫每個需要用到的模塊的相對路徑即可,然后把父目錄的絕對路徑和各模塊的相對路徑做一次拼接,這樣就可以實現上述問題的解決了~
config_file_path = os.path.split(os.path.realpath(__file__))[0] ? ?# 1:獲取當前文件所處文件夾的絕對路徑
config_file_path = os.path.dirname(os.path.dirname(__file__)) ?#2:當前文件父目錄的絕對路徑
config_file_path = os.path.dirname(os.path.realpath(__file__))? #3:當前文件所處文件夾的絕對路徑,等同于第1種寫法
例子1:
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) #獲取當前文件夾的父目錄絕對路徑
print(BASE_DIR)
file_path = os.path.join(BASE_DIR,'C','Test_Data') #獲取C文件夾中的的Test_Data文件
例子2:
class GlobalParam():
def __init__(self,folder,file):
self.BASE_DIR = os.path.dirname(os.path.dirname(__file__))? #獲取當前文件夾的父目錄絕對路徑
self.file_path = os.path.join(self.BASE_DIR,folder,file)? #獲取config文件夾中的的path_file.conf文件————截圖和日志配置文件路徑
def getParam(self,path_Section,path_NO):
#創建讀取配置文件的對象
cf1 = Config(self.file_path)
path = cf1.get_PATH(path_Section,path_NO)
path = self.BASE_DIR + path #將父目錄和配置文件讀取的相對路徑拼接
return path
附上上面的Conifg模塊寫法:
import configparser
class Config:
def __init__(self,configPath):
self.configPath = configPath
def get_PATH(self,path_Section,path_NO):
cf = configparser.ConfigParser()
cf.read(self.configPath)
# path_section填寫"PATH_YUNKU"
# 此處path_config = "path_001"以此類推
path = cf.get(path_Section,path_NO)
return path