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算法之栈(stack)的实现
Aug 18 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
Python正则表达式经典入门教程
May 22 Python
Django时区详解
Jul 24 Python
python字符串的拼接方法总结
Nov 18 Python
使用python远程操作linux过程解析
Dec 04 Python
Django实现列表页商品数据返回教程
Apr 03 Python
python Cartopy的基础使用详解
Nov 01 Python
Python的logging模块基本用法
Dec 24 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 Python
numpy array找出符合条件的数并赋值的示例代码
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
星际实力自我测试
2020/03/04 星际争霸
Codeigniter的一些优秀特性总结
2015/01/21 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
js正则表达式的使用详解
2013/07/09 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
webpack v4 从dev到prd的方法
2018/04/02 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
[16:56]教你分分钟做大人:司夜刺客
2014/10/30 DOTA
python采集博客中上传的QQ截图文件
2014/07/18 Python
Python中format()格式输出全解
2019/04/12 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
通过代码实例了解Python异常本质
2020/09/16 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
PHP两种查询函数array/row的区别
2013/06/03 面试题
法院实习人员自我鉴定
2013/09/26 职场文书
党校培训思想汇报
2013/12/30 职场文书
给校长的建议书400字
2014/05/15 职场文书
市场营销策划方案
2014/06/11 职场文书
婚礼答谢词范文
2015/09/29 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android