這篇文章將為大家詳細(xì)講解有關(guān)在Python中如何以絕對路徑或者相對路徑導(dǎo)入文件,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
為晉中等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及晉中網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、晉中網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!1、在Python中以相對路徑或者絕對路徑來導(dǎo)入文件或者模塊的方法
在調(diào)試代碼的時(shí)候,程序一直提示沒有該模塊,一直很納悶,因?yàn)槲覍?dǎo)入文件一直是用絕對路徑進(jìn)行導(dǎo)入的。按道理來講是不會出現(xiàn)模塊找不到的情況的。
最后仔細(xì)分析了整個(gè)代碼的目錄結(jié)構(gòu),才發(fā)現(xiàn)了問題。
下面依次來說明一下今天的情況
先看導(dǎo)入的代碼:
在demo——mnist.py文件中執(zhí)行以下兩種導(dǎo)入操作 # 第一處 from gcforest.gcforest import GCForest from gcforest.utils.config_utils import load_json # 第二處 config = load_json("demo_mnist-ca.json") # 里面?zhèn)魅氲氖俏募奈恢?,這個(gè)函數(shù)是讀取配置文件的內(nèi)容
然后看一下目錄的結(jié)構(gòu)
在此例中,demo_mnist,py為主文件。它第一處要導(dǎo)入的是它當(dāng)前目錄的父目錄下的一個(gè)子目錄中的一個(gè)目錄中的文件。
所以以絕對路徑導(dǎo)入這個(gè)文件就是 from lib.gcforest.gcforet import GCForest
以相對路徑導(dǎo)入這個(gè)文件就是 from ..gcforest.gcforet import GCForest
第二處導(dǎo)入的是它統(tǒng)一個(gè)目錄下的另一個(gè)文件,所以可以直接導(dǎo)入
所以修改的導(dǎo)入代碼為:config = load_json("demo_mnist-ca.json")
2、 順便復(fù)習(xí)一下相對路徑和絕對路徑的概念
絕對路徑就是文件的真正存在的路徑,是指從硬盤的根目錄(盤符)開始,進(jìn)行一級級目錄指向文件。
相對路徑就是以當(dāng)前文件為基準(zhǔn)進(jìn)行一級級目錄指向被引用的資源文件。
以下是常用的表示當(dāng)前目錄和當(dāng)前目錄的父級目錄的標(biāo)識符
../ 表示當(dāng)前文件所在的目錄的上一級目錄
./ 表示當(dāng)前文件所在的目錄(可以省略)
/ 表示當(dāng)前站點(diǎn)的根目錄(域名映射的硬盤目錄)
在Python中可以驗(yàn)證一下上述的標(biāo)識方法:
測試的目錄結(jié)構(gòu):
import os path2=os.path.abspath('.') # 表示當(dāng)前所處的文件夾的絕對路徑 print(path2) path3=os.path.abspath('..') # 表示當(dāng)前所處的文件夾上一級文件夾的絕對路徑 print(path3)
# D:/PycharmProjects/mnistCheck/AbsolutepathAndrelativepath.py D:\PycharmProjects\mnistCheck D:\PycharmProjects
3、 再了解一下Python sys.path的使用
sys.path是python的搜索模塊的路徑集,是一個(gè)list,如下:
[ 'D:\\PycharmProjects\\mnistCheck', 'D:\\PycharmProjects\\mnistCheck', 'D:\\PycharmProjects\\KerasDataSettry', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow\\python35.zip', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow\\DLLs', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow\\lib', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow\\lib\\site-packages', 'C:\\ProgramData\\Anaconda3\\envs\\tensorflow\\lib\\site-packages\\Sphinx-1.6.3-py3.5.egg' ]
可以在python 環(huán)境下使用: .
sys.path.append(‘你的模塊的名稱')。 sys.path.insert(0,'模塊的名稱')
添加相關(guān)的路徑,但在退出python環(huán)境后自己添加的路徑就會自動消失!
代碼中的實(shí)現(xiàn)如下:
import sys sys.path.append('C:\Users\Administrator\Desktop\ExperimentAss\gcForest-master')
4、最后了解一下 python 在不同層級目錄import 模塊的方法(重點(diǎn))
有一個(gè)文件夾/home/a, 里面有個(gè)模塊叫b.py, 我怎么把他import到程序里?
方法一: ?? (屬于剛開始分析的代碼里第一種情況)
import sys; sys.path.append(“/home/a/”) import b
方法二:
在目錄里面增加__init__.py文件,里面可以寫import時(shí)執(zhí)行的代碼,當(dāng)然也可以留空就可以.
import home.a.b
方法三:
from home.a.b import *
前提 home、a中都包括__init__.py 即:要導(dǎo)入的文件的當(dāng)前目錄和父目錄都要有init.py文件
Python包含子目錄中的模塊方法比較簡單,關(guān)鍵是能夠在sys.path里面找到通向模塊文件的路徑。
下面將具體介紹幾種常用情況:
(1)主程序與模塊程序在同一目錄下:
如下面程序結(jié)構(gòu):
– src ? |– mod1.py ? |– test1.py
若在程序test1.py中導(dǎo)入模塊mod1, 則直接使用import mod1或from mod1 import *;
(2)主程序所在目錄是模塊所在目錄的父(或祖輩)目錄
如下面程序結(jié)構(gòu):
– src |– mod1.py |– mod2 ? | – mod2.py – test1.py
若在程序test1.py中導(dǎo)入模塊mod2, 需要在mod2文件夾中建立空文件__init__.py文件(也可以在該文件中自定義輸出模塊接口); 然后使用 from mod2.mod2 import * 或import mod2.mod2.
(3)主程序?qū)肷蠈幽夸浿心K或其他目錄(平級)下的模塊
如下面程序結(jié)構(gòu):
– src ? |– mod1.py ? |– mod2 ? ?|– mod2.py ? |– sub ? ? | – test2.py ? – test1.py
若在程序test2.py中導(dǎo)入模塊mod1.py和mod2.py。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立該文件。然后調(diào)用方式如下:
下面程序執(zhí)行方式均在程序文件所在目錄下執(zhí)行,如test2.py是在cd sub;之后執(zhí)行python test2.py
而test1.py是在cd src;之后執(zhí)行python test1.py; 不保證在src目錄下執(zhí)行python sub/test2.py成功。
import sys sys.path.append(“..”) import mod1 import mod2.mod2
(4)從(3)可以看出,導(dǎo)入模塊關(guān)鍵是能夠根據(jù)sys.path環(huán)境變量的值,找到具體模塊的路徑。這里僅介紹上面三種簡單情況。
關(guān)于“在Python中如何以絕對路徑或者相對路徑導(dǎo)入文件”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。