python跨目录import_python 跨目录访问文件

本文介绍了Python中如何实现跨目录导入模块和文件。通过修改环境变量sys.path,可以实现不同目录层级间的文件访问。当import一个目录时,解释器会查找该目录下的__init__.py文件。掌握这一技巧,能方便地组织和管理Python项目中的文件结构。
摘要由CSDN通过智能技术生成

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 一些程序规范(跨目录调用文件)

文档内容学习于 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目录下的所有直接子目录和文件的名称(均不包含完整路径),如 >&gt ...

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 ...

随机推荐

深入理解Objective-C:Category

摘要 无论一个类设计的多么完美,在未来的需求演进中,都有可能会碰到一些无法预测的情况.那怎么扩展已有的类呢?一般而言,继承和组合是不错的选择.但是在Objective-C 2.0中,又提供了categ ...

java web系统中时间比sql server中的日期少2天的解决办法

系统环境 jdk:1.7 数据库:sql server 2008 问题描述 升级1.7之后查询出来的日期就比数据库中的少2天,降回1.6版本的jdk就正常了. 问题原因及解决办法 国内网站有很多不靠谱 ...

【DP】HIHO 1078

HIHO #1037 : 数字三角形 题意:中文题就不说了. 思路:提示也很清楚,就这里贴一下代码.注意边界情况. dp[i][j] = max(dp[i-1][j],dp[i-1][j-1])+ma ...

STM32串口

状态寄存器USART_SR的复位值为0x00C0H:即 第七位发送寄存器空TXE=1和第六位发送完成TC=1寄存器为空, TC=1表明发送已完成.此时只要使能了发送空和发送完成中断就可进入中断ISR( ...

奥迪--Q5

-型号:Q5 -价格:40-53W -动力:2T -变速箱:8挡手自一体 -长宽高:4.63,1.90,1.66 -油箱:75L -发动机:EA888 -大灯:氙气

UIMenuController和UIMenuItem的使用

UIMenuController的方法: 1.创建menucontroller + (UIMenuController *)sharedMenuController; 2.设置是否可见 - (void ...

基于IDEA 最新Spirng3&period;2&plus;hibernate4&plus;struts2&period;3 全注解配置 登录

原文 基于IDEA 最新Spirng3.2+hibernate4+struts2.3 全注解配置 登录 首先说说 IDEA 12,由于myeclipse越来越卡,我改用idea12 了,发现其功能强悍 ...

硬盘安装centos

1.用pqmagic划分出来二个分区,第一个是ext3格式的,用于放centos镜像文件,第二个不用管是什么格式的,用于安装centos,我一般在磁盘最后面划分出来二个分区. 2.安装Ext2Fsd  ...

bzoj 4013&colon; &lbrack;HNOI2015&rsqb;实验比较

Description 小D 被邀请到实验室,做一个跟图片质量评价相关的主观实验.实验用到的图片集一共有 N 张图片,编号为 1 到 N.实验分若干轮进行,在每轮实验中,小 D会被要求观看某两张随机选 ...

Beta阶段第二次冲刺

Beta阶段第二次冲刺 严格按照Git标准来,组员有上传Git的才有贡献分没有的为0 代码签入图 1.part1 -站立式会议照片 2.part2 -项目燃尽图 3.part3 -项目进展 1.正在进 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值