python文件读取和导包的绝对路径、相对路径详解
作者:hellobigorange 发布时间:2021-04-12 03:27:05
文件目录层级
一、文件读取的绝对路径和相对路径
用相对路径和绝对路径读取上一层目录的文件、下一层目录的文件及读取同层级的文件。
# @File : platform.py.py
"""1、绝对路径读取文件"""
with open(r"C:\Users\chengjingd\PycharmProjects\pythonProject13\testa\platform\myprocessor\test2.txt", 'r') as f:
print(f.read())
"""2、相对路径读取文件"""
# 读取下一层目录的test2.txt文件
with open("myprocessor/test2.txt", 'r') as f:
print(f.read())
# 读取同层目录的test1.txt
with open("test1.txt", 'r') as f:
print(f.read())
# 读取上一层目录的test.txt文件
with open("../test.txt", 'r') as f:
print(f.read())
..表示进入上一层目录。
若在cite_f.py里读取 test.txt即上上层目录,只要将路径替换为"../../test2.txt"即可。
二、package的绝对路径及相对路径导入
绝对导入的格式为 import A.B
或 from A import B
,相对导入格式为 from . import B
或 from ..A import B
,.代表当前模块,..代表上层模块,...代表上上层模块,依次类推。
相对导入可以避免硬编码带来的维护问题,例如我们改了某一顶层包的名,那么其子包所有的导入就都不能用了。但是 存在相对导入语句的模块,不能直接运行,否则会有异常:
🙉相对路径运行注意事项:
在没有明确指定包结构的情况下,Python 是根据
如果是绝对导入,一个模块只能导入自身的子模块或和它的顶层模块同级别的模块及其子模块__name__
来决定一个模块在包中的结构的,如果是__main__
则它本身是顶层模块,没有包结构,如果是A.B.C 结构,那么顶层模块是 A。基本上遵循这样的原则:
如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块
2.1 导包以绝对路径导入
# @File : platform1.py.py
from testa.platform.myprocessor.myprocessor import *
# 引用同级目录的模块
from a import *
# 引用下一级目录的模块
from myprocessor.myprocessor import *
# 引用上一级目录的模块
from testa.main import *
2.2 导包以相对路径导入
"""在myprocessor.py内导入同等级目录的cite_f"""
# @File : myprocessor.py.py
from .cite_f import f
"""在上一层目录里的platform1.py调用myprocessor.py"""
# @File : platform1.py.py
from myprocessor.myprocessor import *
"""在myprocessor.py内导入同等级目录的cite_f及上层目录的platform1.py"""
# @File : myprocessor.py.py
from .cite_f import f
from ..platform1 import *
"""在上上一层目录里的main.py调用myprocessor.py"""
# @File : main.py.py
from testa.platform.myprocessor.myprocessor import *
参考引用:python的包相关的知识
模块:一组功能的组合,任何以.py
结尾的都可以称作模块
包块的组合,py2要求必须有__init__.py
,py3不需要
三、运行脚本的当前工作路径和绝对路径
脚本所在位置的目录为当前工作路径,无论后续调用哪个模块(子目录模块、父目录模块),当前工作路径不会变os.getcwd()
,但在哪个模块写os.path.abspath(__file__)
就会打印那个模块所在的工作目录。
# @File : myprocessor.py.py
import os
print("当前工作路径:",os.getcwd())
print("绝对路径:",os.path.abspath(__file__))
# @File : platform1.py.py
from myprocessor.myprocessor import *
运行脚本platform1.py
会显示
当前工作路径: C:\Users\PycharmProjects\pythonProject13\testa\platform
绝对路径: C:\Users\PycharmProjects\pythonProject13\testa\platform\myprocessor\myprocessor.py
在脚本中运行示例
总结
来源:https://blog.csdn.net/qq_34229228/article/details/124381490


猜你喜欢
- 小编在以前给大家介绍过很多其他系统安装PyCharm的过程,有兴趣的朋友可以参阅:pycharm 使用心得(一)安装和首次使用python安
- 前言: 上一篇讲了Python排序问题中比较经典的三个方法,(链接:关于Python排
- 发现问题在golang中,对文件进行写操作时出现上面的错误。首先复现下这个问题。package mainimport ( "os&
- 本文实例讲述了python异常和文件处理机制。分享给大家供大家参考,具体如下:1 异常处理Python的异常用tryexceptfinall
- 流动网页设计有很多好处,但也只有在正确使用的时候。合适的技巧会使页面在大屏幕、小屏幕抑、PDA小屏幕上都能得到良好的呈现。但是,糟糕的代码结
- 前言昨天,在本地安装 Swoole 调试环境的时候,遇到好几个坑,因为我的电脑是 Windows 系统,所以安装的是 cygwin ,但是过
- k近邻算法的介绍k近邻算法是一种基本的分类和回归方法,这里只实现分类的k近邻算法。k近邻算法的输入为实例的特征向量,对应特征空间的点;输出为
- 1.尽量不要对列名进行函数处理。而是针对后面的值进行处理例如where col1 = -5的效率比where -col1=5的效率要高因为后
- 朴素贝叶斯估计朴素贝叶斯是基于贝叶斯定理与特征条件独立分布假设的分类方法。首先根据特征条件独立的假设学习输入/输出的联合概率分布,然后基于此
- 基于pygame的飞机大作战小游戏,适合新手,不能直接运行,只能在命令行进入当前游戏目录,输入python game.py才能够运行,尚不知
- 1.函数的声明定义//func关键字//getStudent函数名//(id int, classId int) 参数列表//(name s
- 前言在mysql中slow query log是一个非常重要的功能,我们可以开启mysql的slow query log功能,这样就可以分析
- 目录1、Go 官方的定义2、传值和传引用2.1 传值2.2 传引用3、争议最大的 map 和 slice3.1 map3.2 slice3、
- Asp定时执行操作、Asp定时读取数据库(网页定时操作详解)'----------------------版权信息---------
- vue2.x前置概念:路由钩子分类一共分3类, 7个钩子路由和组件的概念(方便理解钩子函数)路由和组件是2个概念, 可以粗犷的认为:路由是浏
- 此段代码可以利用剪切板,完成自动复制粘贴等功能。(Windows) import sysimport os.pathimport
- 简易网页搜集器前面我们已经学会了简单爬取浏览器页面的爬虫。但事实上我们的需求当然不是爬取搜狗首页或是B站首页这么简单,再不济,我们都希望可以
- declare @str varchar(100) set @str='8f8el3l' declare @s varcha
- python DataFrame的合并方法Python的Pandas针对DataFrame,Series提供了多个合并函数,通过参数的调整可
- cv::Mat 图像格式 (Data Type)命名规则通用的参数命名格式为:CV_{元素比特数}{元素类型}C{通道数}1最常见的 CV_