python 跨目录访问文件
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 跨目录访问文件的更多相关文章
- python 一些程序规范(跨目录调用文件)
文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 参考: https://www.cnblogs.com/monologuesmw/p/9490093.html 软件 ...
- 夺命雷公狗---Thinkphp----9之中间层的创建,防止跨目录访问
我们创建一个CommonController.class.php的中间层,让后让别的控制器都直接继承CommonController这个控制器即可决解跨目录访问的问题, <?php namesp ...
- 解决nginx发布网站跨目录访问
解决nginx发布网站跨目录访问(thinkphp5+lnmp) 到:usr/local/nginx/conf/vim fastcgi.cof 把最后一行加上井号#注释掉保存重启 restart 参考 ...
- 【python跨目录调用】结合自己遇到的问题到解决问题,作个记录
写PO的时候,想把page和case 文件分开存不同的文件夹,但是在调用模块的时候就出现了问题.后来终于解决了,记录下 ---------------------------------------- ...
- Python获取目录、文件的注意事项
Python获取指定路径下的子目录和文件有两种方法: os.listdir(dir)和os.walk(dir),前者列出dir目录下的所有直接子目录和文件的名称(均不包含完整路径),如 >> ...
- cookie跨域,跨目录访问及单点登录。
首先普及下域名的知识: 域名: baidu.com // 一级域名 A play.baidu.com // 二级域名 B abc.play.baidu.com // 三级域名 C 数有几 ...
- pycharm跨目录调用文件
笔者今天在一个测试qq群中遇到解决跨目录中调用文件的问题.现在来详细说一下. 以下图目录为例: 1.同目录下直接调用掉用.test2.py和test3.py在同一个目录test2下. 所以在test3 ...
- Python 读取目录、文件
在读文件的时候往往需要遍历文件夹,python的os.path包含了很多文件.文件夹操作的方法.下面列出: os.path.abspath(path) #返回绝对路径 os.path.basename ...
- python判断目录或者文件
1. 判断目录是否存在 'isdir',删除目录时只有该目录为空才可以 'rmdir' import os if(os.path.isdir('D:/Python_workspace/spyder_s ...
随机推荐
- 【Gamma】Scrum Meeting 1
目录 写在前面 gamma阶段角色更换 进度情况 任务进度表 Gamma阶段燃尽图 遇到的困难 照片 代码Commit记录 后端 前端 写在前面 例会时间:5.25 22:30-23:00 例会地点: ...
- [技术博客]Pyqt中View类别容器和Widget类别容器的区别
Pyqt中View类别容器和Widget类别容器的区别 简介 在beta迭代中,我们选择用pyqt5来重写alpha迭代中使用tkinter库编写的界面. 按钮之类的与tkiner使用无异,在显示 ...
- 信息熵 Information Entropy
信息熵用于描述信源的不确定度, 即用数学语言描述概率与信息冗余度的关系. C. E. Shannon 在 1948 年发表的论文A Mathematical Theory of Communicati ...
- centos7.5环境下elasticserch5.6.15集群升级6.8.4
节点的角色分片: node01 eus_mp_web01 : master,false node,false, ingest,true node02 eus_mp_es01 : master,true ...
- OpenShift 4.2 etcd operatorhub离线环境部署
本文记录在OperatorHub中存在界面但缺少镜像的环境下如何安装部署.感谢王征提供的大力支持和指导. 现在一个在线环境找到etcd所需要的镜像 quay.io/coreos/etcd-operat ...
- CPU时序信号和分频
- Python监听键盘和鼠标事件
我们可以利用windows提供的api函数来实现对系统键盘事件和鼠标事件的监听,主要利用的是SetWindowsHookEx函数,这个函数可以允许调用者传入一个钩子函数也叫回调函数,当指定的事件发生时 ...
- Redis 的主从复制(Master/Slave)
目录 1. 是什么 2. 能干嘛 3. Redis主从复制讲解 (1). info replication:查看 目标redis 主从情况 (2) . 配从库不配主库 (3). 常用策略 (4). 复 ...
- GraphQL&DSL&API网关
车联网服务non-RESTful架构改造实践 导读 在构建面向企业项目.多端的内容聚合类在线服务API设计的过程中,由于其定制特点,采用常规的restful开发模式,通常会导致大量雷同API重复开 ...
- oracle全库查找是否有某个值
在scott用户下面,搜索含有'要找的值'的数据的表和字段穷举法: declare v_Sql ); v_count number; begin for xx in (select t.OWNER, ...