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中使用lambda高效操作列表的教程
Apr 24 Python
RC4文件加密的python实现方法
Jun 30 Python
Python编程中使用Pillow来处理图像的基础教程
Nov 20 Python
不要用强制方法杀掉python线程
Feb 26 Python
Python操作csv文件实例详解
Jul 31 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
python装饰器使用实例详解
Dec 14 Python
python 统计文件中的字符串数目示例
Dec 24 Python
Python实现验证码识别
Jun 15 Python
Python使用Web框架Flask开发项目
Jun 01 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中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
索趣科技的答案
2007/02/07 Javascript
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
JavaScript语法着色引擎(demo及打包文件下载)
2007/06/13 Javascript
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
js实现数字滚动特效
2019/12/16 Javascript
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
自学python用什么系统好
2020/06/23 Python
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
职专应届生求职信
2013/11/16 职场文书
外贸业务员岗位职责
2013/11/24 职场文书
贷款委托书范本
2014/04/08 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
食堂卫生管理制度
2015/08/04 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书