python文件讀取和導(dǎo)包的絕對路徑、相對路徑詳解
文件目錄層級
一、文件讀取的絕對路徑和相對路徑
用相對路徑和絕對路徑讀取上一層目錄的文件、下一層目錄的文件及讀取同層級的文件。
# @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())
..表示進(jìn)入上一層目錄。
若在cite_f.py里讀取 test.txt即上上層目錄,只要將路徑替換為"../../test2.txt"即可。
二、package的絕對路徑及相對路徑導(dǎo)入
絕對導(dǎo)入的格式為 import A.B
或 from A import B
,相對導(dǎo)入格式為 from . import B
或 from ..A import B
,.代表當(dāng)前模塊,..代表上層模塊,...代表上上層模塊,依次類推。
相對導(dǎo)入可以避免硬編碼帶來的維護(hù)問題,例如我們改了某一頂層包的名,那么其子包所有的導(dǎo)入就都不能用了。但是 存在相對導(dǎo)入語句的模塊,不能直接運(yùn)行,否則會有異常:
??相對路徑運(yùn)行注意事項(xiàng):
在沒有明確指定包結(jié)構(gòu)的情況下,Python 是根據(jù)
如果是絕對導(dǎo)入,一個模塊只能導(dǎo)入自身的子模塊或和它的頂層模塊同級別的模塊及其子模塊__name__
來決定一個模塊在包中的結(jié)構(gòu)的,如果是__main__
則它本身是頂層模塊,沒有包結(jié)構(gòu),如果是A.B.C 結(jié)構(gòu),那么頂層模塊是 A?;旧献裱@樣的原則:
如果是相對導(dǎo)入,一個模塊必須有包結(jié)構(gòu)且只能導(dǎo)入它的頂層模塊內(nèi)部的模塊
2.1 導(dǎo)包以絕對路徑導(dǎo)入
# @File : platform1.py.py from testa.platform.myprocessor.myprocessor import * # 引用同級目錄的模塊 from a import * # 引用下一級目錄的模塊 from myprocessor.myprocessor import * # 引用上一級目錄的模塊 from testa.main import *
2.2 導(dǎo)包以相對路徑導(dǎo)入
"""在myprocessor.py內(nèi)導(dǎo)入同等級目錄的cite_f""" # @File : myprocessor.py.py from .cite_f import f """在上一層目錄里的platform1.py調(diào)用myprocessor.py""" # @File : platform1.py.py from myprocessor.myprocessor import *
"""在myprocessor.py內(nèi)導(dǎo)入同等級目錄的cite_f及上層目錄的platform1.py""" # @File : myprocessor.py.py from .cite_f import f from ..platform1 import * """在上上一層目錄里的main.py調(diào)用myprocessor.py""" # @File : main.py.py from testa.platform.myprocessor.myprocessor import *
參考引用:python的包相關(guān)的知識
模塊:一組功能的組合,任何以.py
結(jié)尾的都可以稱作模塊
包塊的組合,py2要求必須有__init__.py
,py3不需要
三、運(yùn)行腳本的當(dāng)前工作路徑和絕對路徑
腳本所在位置的目錄為當(dāng)前工作路徑,無論后續(xù)調(diào)用哪個模塊(子目錄模塊、父目錄模塊),當(dāng)前工作路徑不會變os.getcwd()
,但在哪個模塊寫os.path.abspath(__file__)
就會打印那個模塊所在的工作目錄。
# @File : myprocessor.py.py import os print("當(dāng)前工作路徑:",os.getcwd()) print("絕對路徑:",os.path.abspath(__file__)) # @File : platform1.py.py from myprocessor.myprocessor import *
運(yùn)行腳本platform1.py
會顯示
當(dāng)前工作路徑: C:\Users\PycharmProjects\pythonProject13\testa\platform
絕對路徑: C:\Users\PycharmProjects\pythonProject13\testa\platform\myprocessor\myprocessor.py
在腳本中運(yùn)行示例
總結(jié)
到此這篇關(guān)于python文件讀取和導(dǎo)包的絕對路徑、相對路徑的文章就介紹到這了,更多相關(guān)python文件讀取和導(dǎo)包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中l(wèi)ogging模塊的用法實(shí)例
這篇文章主要介紹了Python中l(wèi)ogging模塊的用法實(shí)例,以實(shí)例形式介紹了日志模塊logging的用法,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09python中字符串?dāng)?shù)組逆序排列方法總結(jié)
在本篇文章里小編給大家整理了關(guān)于python中字符串?dāng)?shù)組如何逆序排列的相關(guān)知識點(diǎn),需要的朋友們學(xué)習(xí)下。2019-06-06python詞云庫wordCloud使用方法詳解(解決中文亂碼)
這篇文章主要介紹了python詞云庫wordCloud使用方法詳解(解決中文亂碼),需要的朋友可以參考下2020-02-02