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


Posted in Python onAugust 07, 2020

问题

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

解决方案

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

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命名规范到不同的目录,只要最后的目录仍然位于包中。

以上就是Python 读取位于包中的数据文件的详细内容,更多关于Python 读取数据文件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python 连连看连接算法
Nov 22 Python
Python3.x和Python2.x的区别介绍
Feb 12 Python
深入理解Python中的内置常量
May 20 Python
mac PyCharm添加Python解释器及添加package路径的方法
Oct 29 Python
python实现事件驱动
Nov 21 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
Python读取csv文件实例解析
Dec 30 Python
Python tkinter常用操作代码实例
Jan 03 Python
python之MSE、MAE、RMSE的使用
Feb 24 Python
Selenium 配置启动项参数的方法
Dec 04 Python
python 实现socket服务端并发的四种方式
Dec 14 Python
python之django路由和视图案例教程
Jul 26 Python
Python如何绘制日历图和热力图
Aug 07 #Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 #Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 #Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 #Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 #Python
解决阿里云邮件发送不能使用25端口问题
Aug 07 #Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
Aug 07 #Python
You might like
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
php微信公众平台开发类实例
2015/04/01 PHP
PHP生成树的方法
2015/07/28 PHP
分享php邮件管理器源码
2016/01/06 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
如何判断Javascript对象是否存在的简单实例
2016/05/18 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
python英语单词测试小程序代码实例
2019/09/09 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
python将unicode和str互相转化的实现
2020/05/11 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
python压包的概念及实例详解
2021/02/17 Python
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
大专生的学习自我评价
2013/12/04 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
避暑山庄导游词
2015/02/04 职场文书
舞出我人生观后感
2015/06/16 职场文书
python pyhs2 的安装操作
2021/04/07 Python
python中filter,map,reduce的作用
2022/06/10 Python