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学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
python基础教程之对象和类的实际运用
Aug 29 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
python实现自动登录后台管理系统
Oct 18 Python
对python 命令的-u参数详解
Dec 03 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
Python 最强编辑器详细使用指南(PyCharm )
Sep 16 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
Django数据库操作之save与update的使用
Apr 01 Python
django教程如何自学
Jul 31 Python
使用Python绘制台风轨迹图的示例代码
Sep 21 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添加MySQL数据记录代码
2008/06/07 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
python使用xpath中遇到:到底是什么?
2018/01/04 Python
zookeeper python接口实例详解
2018/01/18 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
linux下进程间通信的方式
2013/01/23 面试题
金融专业大学生自我评价
2014/01/09 职场文书
安全责任书怎么写
2014/07/28 职场文书
求职自我评价范文
2015/03/09 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
生日祝酒词大全
2015/08/10 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
Android实现图片九宫格
2022/06/28 Java/Android