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

Posted rrh4869

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中以绝对路径或者相对路径导入文件(或模块)的方法相关的知识,希望对你有一定的参考价值。

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

相对路径和绝对路径的概念

绝对路径就是文件的真正存在的路径,是指从硬盘的根目录(盘符)开始,进行一级级目录指向文件。 
相对路径就是以当前文件为基准进行一级级目录指向被引用的资源文件。 


以下是常用的表示当前目录和当前目录的父级目录的标识符 
   
../ 表示当前文件所在的目录的上一级目录 
./ 表示当前文件所在的目录(可以省略) 
/ 表示当前站点的根目录(域名映射的硬盘目录) 


在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
技术图片

3、 再了解一下Python中sys.path的使用

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 环境下使用:


sys.path.append(‘你的模块的名称’)

sys.path.insert(0,’模块的名称’)

 

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

import sys
sys.path.append(‘C:\Users\Administrator\Desktop\ExperimentAss\gcForest-master‘)
技术图片

4、最后了解一下 python 在不同层级目录import 模块的方法(重点)

有一个文件夹/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 * 
前提 home、a中都包括__init__.py 即:要导入的文件的当前目录和父目录都要有init.py文件


 Python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。 

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

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

如下面程序结构: 
– src 
  |– mod1.py 
  |– test1.py

  若在程序test1.py中导入模块mod1, 则直接使用import mod1

(2)主程序所在目录是模块所在目录的父(或祖辈)目录 
如下面程序结构: 
– src 
|– mod1.py 
|– mod2 
  | – mod2.py 
– test1.py

  若在程序test1.py中导入模块mod2, 需要在mod2文件夹中建立空文件__init__.py文件,然后使用 import mod2.mod2.

(3)主程序导入上层目录中模块或其他目录(平级)下的模块 
如下面程序结构: 
– src 
  |– mod1.py 
  |– mod2 
   |– mod2.py 
  |– sub 
    | – test2.py 
  – test1.py 
  若在程序test2.py中导入模块mod1.py和mod2.py。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立该文件。然后调用方式如下: 
  下面程序执行方式均在程序文件所在目录下执行,如test2.py是在cd sub;之后执行python test2.py 
而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环境变量的值,找到具体模块的路径。这里仅介绍上面三种简单情况。

 

总结:

  通过总结可以发现,当你要导入的文件在和你的当前文件在同一个目录时,你直接导入这个文件名就好了。

  当你要导入的文件或者目录不和你的当前文件同目录时,你需要跳到这个你要导入文件的父级目录,然后一级一级的用点号连接走过的目录或者文件,然后就可以了 至于要怎么跳到这个这个父级目录。比较通用的就是,将父级目录加入系统路径,然后用点号一级一级的寻找,直到到达你要导入的模

以上是关于在Python中以绝对路径或者相对路径导入文件(或模块)的方法的主要内容,如果未能解决你的问题,请参考以下文章

导入 JavaScript 时如何在 QML 中使用绝对路径?

Python 包内的导入问题(绝对导入和相对导入)

Python 导入相对路径

Python获取当前脚本文件夹(Script)的绝对路径

关于from . import 的一个问题

详解Python中的相对导入和绝对导入