脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - python文件读取和导包的绝对路径、相对路径详解

python文件读取和导包的绝对路径、相对路径详解

2022-12-07 11:05hellobigorange Python

每次在读或写文件时,获取脚本文件的绝对路径和相对路径时很容易搞混,下面这篇文章主要给大家介绍了关于python文件读取和导包的绝对路径、相对路径的相关资料,需要的朋友可以参考下

文件目录层级

python文件读取和导包的绝对路径、相对路径详解

 

一、文件读取的绝对路径和相对路径

用相对路径和绝对路径读取上一层目录的文件、下一层目录的文件及读取同层级的文件。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# @File : platform.py.py
 
"""1、绝对路径读取文件"""
with open(r"C:UserschengjingdPycharmProjectspythonProject13 estaplatformmyprocessor est2.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.Bfrom A import B,相对导入格式为 from . import Bfrom ..A import B,.代表当前模块,..代表上层模块,...代表上上层模块,依次类推。

相对导入可以避免硬编码带来的维护问题,例如我们改了某一顶层包的名,那么其子包所有的导入就都不能用了。但是 存在相对导入语句的模块,不能直接运行,否则会有异常:

相对路径运行注意事项:

在没有明确指定包结构的情况下,Python 是根据 __name__ 来决定一个模块在包中的结构的,如果是 __main__ 则它本身是顶层模块,没有包结构,如果是A.B.C 结构,那么顶层模块是 A。基本上遵循这样的原则:

如果是绝对导入,一个模块只能导入自身的子模块或和它的顶层模块同级别的模块及其子模块
如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块
python文件读取和导包的绝对路径、相对路径详解

 

2.1 导包以绝对路径导入

?
1
2
3
4
5
6
7
8
# @File : platform1.py.py
from testa.platform.myprocessor.myprocessor import *
# 引用同级目录的模块
from a import *
# 引用下一级目录的模块
from myprocessor.myprocessor import *
# 引用上一级目录的模块
from testa.main import *

 

2.2 导包以相对路径导入

?
1
2
3
4
5
6
"""在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 *
?
1
2
3
4
5
6
7
"""在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__)就会打印那个模块所在的工作目录。

?
1
2
3
4
5
6
# @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:UsersPycharmProjectspythonProject13 estaplatform
绝对路径: C:UsersPycharmProjectspythonProject13 estaplatformmyprocessormyprocessor.py
在脚本中运行示例
python文件读取和导包的绝对路径、相对路径详解

 

总结 

到此这篇关于python文件读取和导包的绝对路径、相对路径的文章就介绍到这了,更多相关python文件读取和导包内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_34229228/article/details/124381490

延伸 · 阅读

精彩推荐
  • PythonPython异常学习笔记

    Python异常学习笔记

    这篇文章主要介绍了Python异常学习笔记,本文着重讲解了如何自定义一个异常,需要的朋友可以参考下 ...

    脚本之家3162020-05-21
  • Python8种常用的Python工具

    8种常用的Python工具

    这篇文章主要介绍了8种常用的Python工具,帮助大家更好的学习Python,感兴趣的朋友可以了解下...

    小小科10062020-08-05
  • Python用Python shell简化开发

    用Python shell简化开发

    这篇文章给大家详细分享了在Python的开发中,如何通过Python shell简化开发,有兴趣的朋友们可以学习下。...

    脚本之家11532021-03-26
  • Pythonpython实现图片转字符画的完整代码

    python实现图片转字符画的完整代码

    这篇文章主要给大家介绍了关于python实现图片转字符画的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    FlyeWong10052021-09-07
  • Python通过Python 接口使用OpenCV的方法

    通过Python 接口使用OpenCV的方法

    下面小编就为大家分享一篇通过Python 接口使用OpenCV的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    man_world11562021-01-26
  • Pythonpython简单验证码识别的实现过程

    python简单验证码识别的实现过程

    很多网站登录都需要输入验证码,如果要实现自动登录就不可避免的要识别验证码,这篇文章主要给大家介绍了关于python简单验证码识别的实现过程,需要的朋...

    冰履踏青云10892021-12-05
  • Pythonpython中字符串最常用的十三个处理操作记录

    python中字符串最常用的十三个处理操作记录

    这篇文章主要给大家介绍了关于python中字符串最常用的13个处理操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    Mr Gao10342021-09-18
  • PythonOpenCV物体跟踪树莓派视觉小车实现过程学习

    OpenCV物体跟踪树莓派视觉小车实现过程学习

    这篇文章主要介绍了OpenCV物体跟踪树莓派视觉小车的实现过程学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    _睿智_9892022-01-25