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
猜你喜欢
- filecmp定义了两个函数,用于方便地比较文件与文件夹: filecmp.cmp(f1, f2[, shallow]): 比较两个文件的内
- 一、selenium截取验证码import jsonfrom io import BytesIOimport timefrom test.t
- 用analyze进行处理,定期进行处理ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name
- 先给大家介绍下python制作定时发送信息脚本,内容如下所示:文章中提到的菜单是右下角这个需求我们需要做到打开微信获取输入框焦点及输入思路1
- 1. 简介在一些研究领域很多经典算法和工具都由上古语言Fortran编写,而这部分代码又没有对应的C/C++和Python版本。因此,掌握P
- 本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法。分享给大家供大家参考。具体分析如下:这段代码主要用来从图片提取
- 在实际工作中,有时候需要对判断字符串是否为合法的json格式解决方法使用json.loads,这样更加符合‘Pythonic'写法代
- 本段代码是先将需要转换经纬度的地址爬取在 ‘地址.csv' 文件里,文件截图示例:代码展示# coding=utf-8# SPL#
- 本文实例讲述了JS中getElementsByClassName与classList兼容性问题解决方案。分享给大家供大家参考,具体如下:do
- 引言django提供了一个默认的auth系统用于用户的登录和授权,并提供了一定的扩展性,允许开发者自行定义多个验证后台,每个验证后台必须实现
- 这是一个自动化程度较高的程序,运行本程序后会从chrome中读取cookies用于登录人人影视签到,并且会自动添加一个windows 任务计
- 前言ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。随着框架代码量的增加,一些潜在的威胁也逐渐暴
- python生成随机数都有哪些办法呢使用 random 模块:random模块是python内置的模块,使用方法如random.randin
- 1.彻底弄懂CSS盒子模式一(DIV布局快速入门) 2.彻底弄懂CSS盒子模式二(导航栏实例) 4.彻底弄懂CSS盒子模式四(绝对定位和相对
- 目录一、介绍二、前提三、get的请求3.1 GET无参请求3.2 GET传参四、post请求五、Requests响应六、Request扩充七
- 在SQL Server数据库中,如果执行Transact-SQL时出现了错误,我们可以使用两种捕捉错误的方法解决此问题,一种是在客户端代码(
- 1、执行cmd指令,在cmd输出的内容会直接在控制台输出,返回结果为0表示执行成功。2、在调用完shell脚本后,返回一个16位的二进制数,
- 昨天又翻了下前段时间WD内部培训的幻灯片,发现了kejun推荐的一篇好文:Javascript Closures,看了之后受益匪浅。这篇文章
- 一:购物车管理功能1.添加商品(不重复添加)、2.删除商品(购物车中有的才能删除)、3.查看购物车4.退出系统产品列表products =
- 不通过数据源名DSN也能访问Access数据库吗?代码如下:<% dim conn &nbs