python 跨目录访问文件

1.同级、同目录的文件之间的访问app

有这样一个目录结构函数

 

 

 假如,in_A.py  想访问  hello_world.py 中的函数怎么呢?  ------->>>   importspa

只需在 in_A.py 中 写入 code

1 import hello_world
2 hello_world.functions()

这样就能够访问啦,什么原理呢?对象

import hello_world 的本质blog

首先,import 语法会将 hello_world 里的全部内容解释到内存中,并把它赋值给 hello_world 这个变量,而后咱们就能够经过点号访问 这个变量里的内容了,好比函数,变量什么的内存

好比 hello_world.hello() 就是调用了hello_world.py 里的 hello() 方法。it

 接下来一个问题,import 是怎么找到 hello_world.py 这个文件的呢?io

import 首先会在当前目录下找,没找到就去环境变量里找。function

环境变量,能够经过 sys 模块下的 path列表查看哈

到这里,就明白了同级同目录之间的文件访问啦


 

2.同级、不一样目录的文件之间的访问

如今来了个这样的目录结构

 这时若是说 in_B.py 这位老兄也想访问 hello_world.py 里的对象怎么办呢? 直接 import是确定不行啦,由于当前目录找不到,环境变量里也找不到。

 若是 import content_A 会是什么效果呢?固然也是不行啦。content_A 没在环境变量里。他没有在环境变量里那就把他的“ father ”加进去吧,为啥加他的上级目录?找到他的父级目录也就找到他了

把上级目录加入环境变量:

1 import os
2 import sys
3 path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
4 # print(path)
5 sys.path.append(path) 

dirname() 函数返回上级目录

abspath() 函数把相对来说转化为绝对路径

__flie__ 变量存储的是当前文件的相对路径

最后哦经过 sys 模块把一个路径加入环境变量

完成了上面的 一系列操做之后,问题又来了

以前 import 的是 .py的文件,如今直接 import 了一个目录,解释器会干什么呢?若是一个目录下有一堆文件他应该 import 那个呢?

hh,解释器是很聪明的,他会跑去解释目录下的 __init__.py 文件。一般这个文件都是没有内容的,可是解释器既然都去了,那么就给几行代码给他解释一下吧。

这时就能够用把 content_A 的父级目录加入环境变量的方法,把 content_A 加入加入环境变量啦,把代码写入__init__.py 就行了,这时就能够愉快的在

in_B.py 里 import, “content_A”目录下的文件啦,不仅限于 hello_world 哦

3.不一样级、不一样目录的文件之间的访问

 有了上面的思路,想 import 谁,把他的 父级目录  送进  环境变量就能够了,就不举例子了

相关文章
相关标签/搜索