如何用 Python 如何正确读取资源文件

2023-06-04 0 739

#「闪烁关键时刻」主轴征文活动 三期#

他们晓得,当你把两个天然资源文档和两个.py文档放到一同的这时候,你能间接在那个.py文档中,采用文档名加载它。比如:

with open(test.txt) as f:

content = f.read()

print(文档中的文本为:, content)

运转效用如下表所示图右图:

如何用 Python 如何正确读取资源文件

但请注意,这儿我是间接运转的read.py那个文档。假如天然资源文档是存放到两包(package)里头,接着我们在外边初始化那个包里头的.py文档会好不好呢?他们试试看:

如何用 Python 如何正确读取资源文件

能看见,那时Python 早已找不出那个文档了。这原因在于,他们的出口处流程在 ~/get_title文档夹中,而test.txt文档在~/get_title/util文档夹中。即使他们运转的是main.py,因此 Python 会在~/get_title文档夹里头找寻test.txt,大自然就找不出了。

假如是提及包里头的其它组件,能采用相对路径。比如提及同两包里头名为sql_util.py里头的conn第一类,他们能间接记为from .sql_util import conn。但天然资源文档无法采用四元组来加载,如下表所示图右图:

如何用 Python 如何正确读取资源文件

有两个笨办

import os

def read_file():

current_folder = os.path.dirname(__file__)

resource_path = os.path.join(current_folder, test.txt)

with open(resource_path) as f:

content = f.read()

print(文档中的文本为:, content)

运转效用如下表所示图右图:

如何用 Python 如何正确读取资源文件

但这样写稍显麻烦。

假如你的 Python 版本不低于3.7,那么你能采用importlib.resources来快速加载天然资源文档:

from importlib import resources

with resources.open_text(包名, 天然资源路径) as f:

content = f.read()

运转效用如下表所示图右图:

如何用 Python 如何正确读取资源文件

假如你加载的不是文本文档,那么你能把resources.open_text改成resources.open_binary,从而加载二进制文档。

但需要注意的是,天然资源文档必须放到包的根目录。这样才能恰当加载。假如天然资源文档在包内部的子目录中,importlib.resources是无法间接加载的。

比如他们的包为util,里头有两个文档夹叫做deep_folder,天然资源文档test.txt放到deep_folder中,此时,他们假如要加载那个天然资源文档,就必须把在deep_folder文档夹中创建两个__init__.py,把它也变成两包。接着修改read.py的代码:

fromimportlibimport resources

from . import deep_folder

def read_file():

withresources.open_text(deep_folder, test.txt)as f:

content = f.read()

print(文档中的文本为:, content)

把deep_folder作为两个 module 导入,接着把那个 module 作为resources.open_text的第两个参数。这样才能恰当加载,如下表所示图右图:

如何用 Python 如何正确读取资源文件

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务