1. 程式人生 > >函式和常用模組【day05】:不同目錄間進行模組呼叫(八)

函式和常用模組【day05】:不同目錄間進行模組呼叫(八)

本節內容

1、背景

2、函式功能解釋

3、絕對路徑和相對路徑

4、不同目錄間進行模組呼叫

一、背景

  之前寫了軟體開發目錄規範這篇部落格,相信很多人都已經知道,我們在寫程式時需要遵循一定的規範,不然,就算很簡答的邏輯程式的程式碼,讀起來會很費勁,佔用了我們大量的時間,但是,我們一旦用了這樣的規範目錄,我們怎麼去愉快的進行模組之前的相互匯入呢?這就不得不說我們今天討論的兩個概念:絕對路徑和相對路徑。

二、函式功能解釋

1、__file__

功能:返回自身檔案的相對路徑

1 2 3 4 5 6 7 8 9 10 #atm.py中的程式碼 print (__file__)   #pycharm的執行結果 D:\Python\Python35\python.exe D: / PycharmProjects / 51homework / Atm
/ bin / atm.py D: / PycharmProjects / 51homework / Atm / bin / atm.py   #打印出絕對路徑   #從cmd執行atm.py 
D:\PycharmProjects\ 51homework >python Atm / bin / atm.py  Atm / bin / atm.py    #列印的是相對路徑

從上面看,為什麼pycharm中執行的結果是絕對路徑,而從cmd呼叫python命令時顯示的卻是相對路徑?你從pycharm的執行結果可以看出,在pycharm執行atm.py檔案時,是從絕對路徑下去執行的,而你從cmd下去執行的時候,是你選擇可以在哪個路徑下執行,而__file__表示的是相對路徑,所以在哪個路徑下,就列印哪個路徑。

2、os.path.abs()

功能:返回自身檔案的絕對路徑

1 2 3 4 5 6 #atm.py的檔案程式碼 import  os print (os.path.abspath(__file__)) #在cmd中的執行結果 D:\PycharmProjects\ 51homework >python Atm / bin / atm.py D:\PycharmProjects\ 51homework \Atm\ bin \atm.py   #獲取atm.py的絕對路徑

3、os.path.dirname()

功能:返回目錄名,不需要檔名

1 2 3 4 5 6 #atm.py的檔案程式碼 import  os print (os.path.dirname( os.path.abspath(__file__) )) #在cmd中的執行結果 D:\PycharmProjects\ 51homework >python Atm / bin / atm.py D:\PycharmProjects\ 51homework \Atm\ bin   #只返回目錄名,不需要檔名

4、sys.path

功能:python環境的執行的環境變數

1 2 3 4 5 6 7 8 #atm.py中的程式碼 import  sys print (sys.path) #cmd執行的結果 D:\PycharmProjects\ 51homework >python Atm / bin / atm.py [ 'D:\\PycharmProjects\\51homework\\Atm\\bin' 'D:\\Python\\Python35\\python35.zip' ,   'D:\\Python\\Python35\\DLLs' 'D:\\Python\\Python35\\lib' 'D:\\Python\\Python35' , 'D:\\Python\\Python35\\lib\\site-packages' ]

注:執行路徑是列表的形式打印出來的,所以sys.path資料型別是一個列表。

三、絕對路徑和相對路徑

1、絕對路徑

絕對路徑:從根目錄為起點到你所在的目錄。

1 2 3 4 5 6 >>>  import  os >>> os.chdir( "D:\\PycharmProjects\\51homework\\Atm\\bin\\" ) >>> os.listdir() [ 'atm.py' '__init__.py' ] >>> os.path.abspath( 'atm.py' ) 'D:\\PycharmProjects\\51homework\\Atm\\bin\\atm.py'    #是從D盤的這個根目錄下來的

2、相對路徑

相對路徑:從一個目錄為起點到你所在的目錄。

1 2 3 4 5 6 >>>  import  os >>> os.chdir( "D:\\PycharmProjects\\51homework\\Atm\\bin\\" ) >>> os.listdir() [ 'atm.py' '__init__.py' ] >>> os.path.dirname( 'atm.py' ) ''    #顯示相對路徑

四、不同目錄間進行模組呼叫

1、新增環境變數

一般情況下,絕對路勁函式和相對路徑函式是結合起來用的,特別是在不同目錄之間相互呼叫彼此的模組。

比如按以上層級:atm.py如果想呼叫其他模組中的程式碼,必須要跟atm.py是同級的,不信請看如下程式碼:

1 2 3 4 5 6 7 8 #atm.py中的程式碼 import  sys print (sys.path) #cmd執行的結果 D:\PycharmProjects\ 51homework >python Atm / bin / atm.py [ 'D:\\PycharmProjects\\51homework\\Atm\\bin' 'D:\\Python\\Python35\\python35.zip' ,   'D:\\Python\\Python35\\DLLs' 'D:\\Python\\Python35\\lib' 'D:\\Python\\Python35' , 'D:\\Python\\Python35\\lib\\site-packages' ]

只到'D:\\PycharmProjects\\51homework\\Atm\\bin'這一層,其他的層級無法呼叫。那怎麼辦吶?

步驟如下:

  1. 獲取Atm的絕對路徑
  2. 新增到環境變數中

程式碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 #atm.py中的程式碼 import  os,sys BASE_DIR  =  os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) )  #Atm的絕對路徑 print (BASE_DIR) sys.path.append(BASE_DIR)   #新增到環境變數中 print (sys.path)   #cmd執行結果 D:\PycharmProjects\ 51homework >python Atm / bin / atm.py    #執行atm.py檔案 D:\PycharmProjects\ 51homework \Atm    #列印Atm的絕對路徑 [ 'D:\\PycharmProjects\\51homework\\Atm\\bin' 'D:\\Python\\Python35\\python35.zip' , 'D:\\Python\\Python35\\DLLs' 'D:\\Python\\Python35\\lib' 'D:\\Python\\Python35' ,   'D:\\Python\\Python35\\lib\\site-packages' ,   'D:\\PycharmProjects\\51homework\\Atm' ]    #Atm的絕對路徑已經新增到環境變數中

2、呼叫其他模組

接下來就可以順利的進行不同目錄下,模組之間的呼叫了

1 2 3 4 5 6 7 8 9 10 11 12 13 14 #atm.py中的程式碼 import  os,sys BASE_DIR  =  os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) sys.path.append(BASE_DIR) from  core  import  main    #呼叫core中的main模組 main.sayhi()    #呼叫main模組中sayhi函式   #main.py中程式碼 def  sayhi():      print ( "hello word" )   #cmd執行的結果 D:\PycharmProjects\ 51homework >python Atm / bin / atm.py hello word