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解析json实例方法
Nov 19 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
详解在Python中处理异常的教程
May 24 Python
在Python中操作文件之truncate()方法的使用教程
May 25 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
python 动态生成变量名以及动态获取变量的变量名方法
Jan 20 Python
基于Python的PIL库学习详解
May 10 Python
对python中的装包与解包实例详解
Aug 24 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
python解释器安装教程的方法步骤
Jul 02 Python
基于tensorflow __init__、build 和call的使用小结
Feb 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
PHP中echo和print的区别
2014/08/28 PHP
zend framework重定向方法小结
2016/05/28 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
Js sort排序使用方法
2011/10/17 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
Python subprocess模块学习总结
2014/03/13 Python
python使用socket连接远程服务器的方法
2015/04/29 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
python清空命令行方式
2020/01/13 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
幼儿园园长自我鉴定
2013/10/22 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
技术负责人任命书
2014/06/05 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
小型婚礼主持词
2015/06/30 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
Java无向树分析 实现最小高度树
2022/04/09 Javascript
python数据处理之Pandas类型转换
2022/04/28 Python