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


有这样一个目录结构

假如,in_A.py 这个文件想调用 hello_world.py 中的函数怎么办呢? --->>>  import

只需在 in_A.py 中 写入

import hello_world
hello_world.functions()

这样就可以访问啦,什么原理呢?

import hello_world 的本质

首先,import 语法会将 hello_world 里的所有内容解释(一行一行的读)到内存中,并把它赋值给hello_world 这个对象,然后我们就可以通过点号(' . ')访问这个对象里的内容了,比如调用函数,使用变量......

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

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

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

环境变量,可以通过 sys 模块下的 path列表查看哈

import sys
print(sys.path)

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

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


现在来了个这样的目录结构

如果说 in_B.py 这位老兄也想访问 hello_world.py 里的对象怎么办呢? 直接 import是肯定就不行啦,因为当前目录下找不到,环境变量里也找不到。

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

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

import os
import sys
path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# print(path)
sys.path.append(path)

dirname() ,返回上级目录

abspath() ,把相对路劲转化为绝对路径

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

最后通过 append() 把一个路径加入环境变量,完成了上面的 一系列操作以后,问题又来了

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

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

这时就可以用把 content_A 的父级目录加入环境变量的方法,把 content_A 加入环境变量,把代码写入__init__.py 就好了,这时就可以愉快的在 in_B.py 里 import, “content_A”目录下的文件啦,不只限于 hello_world

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


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

python 跨目录访问文件的更多相关文章

  1. python 一些程序规范(跨目录调用文件)

    文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 参考: https://www.cnblogs.com/monologuesmw/p/9490093.html 软件 ...

  2. 夺命雷公狗---Thinkphp----9之中间层的创建,防止跨目录访问

    我们创建一个CommonController.class.php的中间层,让后让别的控制器都直接继承CommonController这个控制器即可决解跨目录访问的问题, <?php namesp ...

  3. 解决nginx发布网站跨目录访问

    解决nginx发布网站跨目录访问(thinkphp5+lnmp) 到:usr/local/nginx/conf/vim fastcgi.cof 把最后一行加上井号#注释掉保存重启 restart 参考 ...

  4. 【python跨目录调用】结合自己遇到的问题到解决问题,作个记录

    写PO的时候,想把page和case 文件分开存不同的文件夹,但是在调用模块的时候就出现了问题.后来终于解决了,记录下 ---------------------------------------- ...

  5. Python获取目录、文件的注意事项

    Python获取指定路径下的子目录和文件有两种方法: os.listdir(dir)和os.walk(dir),前者列出dir目录下的所有直接子目录和文件的名称(均不包含完整路径),如 >> ...

  6. cookie跨域,跨目录访问及单点登录。

    首先普及下域名的知识: 域名: baidu.com    // 一级域名  A play.baidu.com  //  二级域名 B abc.play.baidu.com // 三级域名  C 数有几 ...

  7. pycharm跨目录调用文件

    笔者今天在一个测试qq群中遇到解决跨目录中调用文件的问题.现在来详细说一下. 以下图目录为例: 1.同目录下直接调用掉用.test2.py和test3.py在同一个目录test2下. 所以在test3 ...

  8. Python 读取目录、文件

    在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法.下面列出: os.path.abspath(path) #返回绝对路径 os.path.basename ...

  9. python判断目录或者文件

    1. 判断目录是否存在 'isdir',删除目录时只有该目录为空才可以 'rmdir' import os if(os.path.isdir('D:/Python_workspace/spyder_s ...

随机推荐

  1. HashMap多线程并发问题分析-正常和异常的rehash1(阿里)

    多线程put后可能导致get死循环 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题.后来,我们的程序性能有问题,所以需要变成多线程的,于是,变 ...

  2. MySQL 性能调优

    MySQL 性能调优   索引 索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里,不用一页一页查阅找出需要的资料. 索引目的 ...

  3. 关于RSA汇总

    写在前面 安全测试需要, 后台数据需要签名, 前台验签, 于是有了这篇hao123. 正文 jsrsasign https://github.com/kjur/jsrsasign jsrsasign使 ...

  4. MongoDB笔记: 分片集群

    MongoDB分片集群由三个模块组成 shard: 分片(或者分区)模块, 每个分片分别存储一部分数据, 从MongoDB 3.6开始, 分片必须是replica set(副本集) mongos: m ...

  5. Java基础 awt Frame 窗体的大小不可调

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  6. 运维笔记--SqlServer相关版本&下载&安装&配置远程连接

    下载地址:SqlServer2008为例 SqlServer2008:https://www.microsoft.com/en-us/download/details.aspx?id=1695 Sql ...

  7. js比较时间大于6个月

    //mons是比较的月数,如 2019-02-01 14:27:08 - 2019-08-01 14:27:08 function compareTime(mons,stTime,endTime){ ...

  8. 巧用List.stream()方法对List做处理

    List.steam()的强大之处在此不做赘述. 直接进入主题: 1.过滤Bean List中,某些字段等于指定值的所有行 List<Member> list = itemsArray.t ...

  9. 【KakaJSON手册】08_其他用法

    除了完成JSON和Model的转换之外,KakaJSON内部还有很多实用的功能,有些也开放为public接口了 遍历属性 struct Cat { var age: Int = 0 let name: ...

  10. 解决catalina.out文件过大的问题

    有用Tomcat的人,绝对都会遇到这样一个问题:catalina.out文件过大. 它是Tomcat默认生成的日志文件,会随着时间的推移,逐渐增大,不断的增长,甚至达到几G,几十G的大小.由于文件过大 ...