Python 读取位于包中的数据文件

作者:David Beazley 时间:2023-06-09 00:16:03 

问题

你的包中包含代码需要去读取的数据文件。你需要尽可能地用最便捷的方式来做这件事。

解决方案

假设你的包中的文件组织成如下:

mypackage/
    __init__.py
    somedata.dat
    spam.py

现在假设spam.py文件需要读取somedata.dat文件中的内容。你可以用以下代码来完成:


# spam.py
import pkgutil
data = pkgutil.get_data(__package__, 'somedata.dat')

由此产生的变量是包含该文件的原始内容的字节字符串。

讨论

要读取数据文件,你可能会倾向于编写使用内置的I/ O功能的代码,如open()。但是这种方法也有一些问题。

首先,一个包对解释器的当前工作目录几乎没有控制权。因此,编程时任何I/O操作都必须使用绝对文件名。由于每个模块包含有完整路径的__file__变量,这弄清楚它的路径不是不可能,但它很凌乱。

第二,包通常安装作为.zip或.egg文件,这些文件并不像在文件系统上的一个普通目录里那样被保存。因此,你试图用open()对一个包含数据文件的归档文件进行操作,它根本不会工作。

pkgutil.get_data()函数是一个读取数据文件的高级工具,不用管包是如何安装以及安装在哪。它只是工作并将文件内容以字节字符串返回给你

get_data()的第一个参数是包含包名的字符串。你可以直接使用包名,也可以使用特殊的变量,比如__package__。第二个参数是包内文件的相对名称。如果有必要,可以使用标准的Unix命名规范到不同的目录,只要最后的目录仍然位于包中。

来源:https://python3-cookbook.readthedocs.io/zh_CN/latest/c10/p08_read_datafile_within_package.html

标签:Python,读取,包,文件
0
投稿

猜你喜欢

  • python中open函数的基本用法示例

    2021-08-03 20:42:31
  • Python定制类你不知道的魔术方法

    2022-10-26 11:26:40
  • 动态程序防采集的新方法

    2010-04-24 15:24:00
  • python实现简单爬虫功能的示例

    2022-02-12 01:39:06
  • VMware中linux环境下oracle安装图文教程(一)

    2024-01-28 07:10:36
  • anaconda安装后打不开解决方式(亲测有效)

    2023-01-21 09:40:15
  • Python读取stdin方法实例

    2022-09-07 19:03:00
  • 微信小程序实现渐入渐出动画效果

    2024-04-23 09:32:53
  • vue全局自定义指令-元素拖拽的实现代码

    2024-04-30 08:46:16
  • Vue超详细讲解重试机制示例

    2024-04-30 08:45:37
  • 父节点获取子节点的字符串示例代码

    2024-02-27 05:07:02
  • 详解Vue 全局引入bass.scss 处理方案

    2024-06-05 10:03:08
  • 利用Yahoo Pipes和jQuery做一个RSS挂件

    2010-06-08 13:40:00
  • asp会员系统如何实现“忘记密码”

    2007-09-19 12:17:00
  • Python利用redis-py实现集合与有序集合的常用指令操作

    2021-02-11 21:29:24
  • 12个对网页设计师非常有用的图片优化工具[译]

    2009-09-22 14:29:00
  • python Dijkstra算法实现最短路径问题的方法

    2022-02-21 03:08:51
  • OpenCV-Python 实现两张图片自动拼接成全景图

    2022-12-07 11:25:49
  • Python根据成绩分析系统浅析

    2023-08-02 20:25:07
  • 在Oracle PL/SQL中游标声明中表名动态变化的方法

    2009-02-28 10:39:00
  • asp之家 网络编程 m.aspxhome.com