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 MD5文件生成码
Jan 12 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
将python代码和注释分离的方法
Apr 21 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
python中的数据结构比较
May 13 Python
python中自带的三个装饰器的实现
Nov 08 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
Python自动化之UnitTest框架实战记录
Sep 08 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 Python
Django分页器的用法你都了解吗
May 26 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计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
PHP多维数组排序array详解
2017/11/21 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
2013/08/14 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
自学python的建议和周期预算
2019/01/30 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
Python模块的制作方法实例分析
2019/12/21 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
美国著名的团购网站:Woot
2016/08/02 全球购物
世界上最大的在线旅行社新加坡网站:Expedia新加坡
2016/08/25 全球购物
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
《学会看病》教学反思
2016/02/17 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技