在Python中以绝对路径或者相对路径导入文件的方法

匿名 (未验证) 提交于 2019-12-02 22:51:30


先看导入的代码:

在demo――mnist.py文件中执行以下两种导入操作 # 第一处 from gcforest.gcforest import GCForest from gcforest.utils.config_utils import load_json # 第二处 config = load_json("demo_mnist-ca.json")  # 里面传入的是文件的位置,这个函数是读取配置文件的内容

然后看一下目录的结构



所以以绝对路径导入这个文件就是 from lib.gcforest.gcforet import GCForest
以相对路径导入这个文件就是 from ..gcforest.gcforet import GCForest

第二处导入的是它统一个目录下的另一个文件,所以可以直接导入
所以修改的导入代码为:config = load_json("demo_mnist-ca.json")





../ 表示当前文件所在的目录的上一级目录
./ 表示当前文件所在的目录(可以省略)
/ 表示当前站点的根目录(域名映射的硬盘目录)

在Python中可以验证一下上述的标识方法:

测试的目录结构:

import os path1=os.path.abspath('.')   # 表示当前所处的文件夹的绝对路径 print(path1) path2=os.path.abspath('..')  # 表示当前所处的文件夹上一级文件夹的绝对路径 print(path2)
# D:/PycharmProjects/mnistCheck/AbsolutepathAndrelativepath.py D:\PycharmProjects\mnistCheck D:\PycharmProjects

sys.path是python的搜索模块的路径集,是一个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 环境下使用: .

添加相关的路径,但在退出python环境后自己添加的路径就会自动消失!
代码中的实现如下:

import sys sys.path.append('C:\Users\Administrator\Desktop\ExperimentAss\gcForest-master')

有一个文件夹/home/a, 里面有个模块叫b.py, 我怎么把他import到程序里?

方法一:

import sys;
sys.path.append(“/home/a/”)
import b

方法二:

__init__.py文件,里面可以写import时执行的代码,当然也可以留空就可以.
import home.a.b

方法三:

from home.a.b import *
init.py文件



下面将具体介绍几种常用情况:

(1)主程序与模块程序在同一目录下:

如下面程序结构:


(2)主程序所在目录是模块所在目录的父(或祖辈)目录
如下面程序结构:




(3)主程序导入上层目录中模块或其他目录(平级)下的模块
如下面程序结构:









而test1.py是在cd src;之后执行python test1.py; 不保证在src目录下执行python sub/test2.py成功。
import sys
sys.path.append(“..”)
import mod1
import mod2.mod2

(4)从(3)可以看出,导入模块关键是能够根据sys.path环境变量的值,找到具体模块的路径。这里仅介绍上面三种简单情况。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!