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+selenium实现京东自动登录及秒杀功能
Nov 18 Python
解决python3 json数据包含中文的读写问题
May 10 Python
PyTorch学习笔记之回归实战
May 28 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
解读python如何实现决策树算法
Oct 11 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
Python with用法:自动关闭文件进程
Jul 10 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
Python Tkinter实例——模拟掷骰子
Oct 24 Python
Python Pygame实战之塔防游戏的实现
Mar 17 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
php 数组的一个悲剧?
2011/05/11 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
一个网马的tips实现分析
2010/11/28 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
angular第三方包开发整理(小结)
2018/04/19 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
Python编程中的for循环语句学习教程
2015/10/14 Python
Python常用库推荐
2016/12/04 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
Python数据可视化图实现过程详解
2020/06/12 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
德国家具在线:Fashion For Home
2017/03/11 全球购物
浙大毕业生自荐信
2014/01/26 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS