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 相关文章推荐
pygame学习笔记(5):游戏精灵
Apr 15 Python
Python3使用requests登录人人影视网站的方法
May 11 Python
Python实现字符串格式化的方法小结
Feb 20 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
python 移除字符串尾部的数字方法
Jul 17 Python
Python补齐字符串长度的实例
Nov 15 Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 Python
对python多线程中Lock()与RLock()锁详解
Jan 11 Python
tensorflow 重置/清除计算图的实现
Jan 19 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
Selenium浏览器自动化如何上传文件
Apr 06 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安全编程之加密功能
2006/10/09 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
PHP处理Json字符串解码返回NULL的解决方法
2014/09/01 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
2019/10/08 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
Bootstrap Fileinput文件上传组件用法详解
2016/05/10 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
Vue父组件监听子组件生命周期
2020/09/03 Javascript
python和shell监控linux服务器的详细代码
2018/06/22 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
django和vue实现数据交互的方法
2019/08/21 Python
三星美国官网:Samsung美国
2017/02/06 全球购物
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
教师队伍管理制度
2014/01/14 职场文书
应聘教师自荐书
2014/06/16 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
2014年女职工工作总结
2014/11/27 职场文书
晚会闭幕词
2015/01/28 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL
Vue和Flask通信的实现
2021/05/19 Vue.js