函式和常用模組【day05】:不同目錄間進行模組呼叫(八)
阿新 • • 發佈:2018-11-01
本節內容
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'這一層,其他的層級無法呼叫。那怎麼辦吶?
步驟如下:
- 獲取Atm的絕對路徑
- 新增到環境變數中
程式碼如下:
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
|