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发送SMTP邮件的教程
Apr 29 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
Python OS模块实例详解
Apr 15 Python
python接口自动化测试之接口数据依赖的实现方法
Apr 26 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
Django 多对多字段的更新和插入数据实例
Mar 31 Python
使用sklearn对多分类的每个类别进行指标评价操作
Jun 11 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
Jul 14 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的4种常见运行方式
2015/03/20 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
python3.5仿微软计算器程序
2020/03/30 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
css3 按钮 利用css3实现超酷下载按钮
2013/03/18 HTML / CSS
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
大学生收银员求职信分享
2014/01/02 职场文书
社会实践感言
2014/01/25 职场文书
火锅店营销方案
2014/02/26 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
同意报考证明
2015/06/17 职场文书
中秋联欢会主持词
2015/07/04 职场文书
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android
pandas中pd.groupby()的用法详解
2022/06/16 Python