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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
详解Python的Twisted框架中reactor事件管理器的用法
May 25 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
Apr 15 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
python读取目录下最新的文件夹方法
Dec 24 Python
实例讲解Python3中abs()函数
Feb 19 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 Python
wxPython实现整点报时
Nov 18 Python
PyCharm 光标变成黑块的解决方式
Feb 06 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 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
晶体管单管来复再生式收音机
2021/03/02 无线电
Javascript hasOwnProperty 方法 & in 关键字
2008/11/26 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
2014/11/26 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
2016/12/05 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
Python是编译运行的验证方法
2015/01/30 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
下载官网python并安装的步骤详解
2019/10/12 Python
python使用配置文件过程详解
2019/12/28 Python
链表面试题-一个链表的结点结构
2015/05/04 面试题
培训讲师邀请函
2014/01/10 职场文书
运动会通讯稿50字
2014/01/30 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
公司授权委托书样本
2014/09/15 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
Redis全局ID生成器的实现
2022/06/05 Redis