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多进程中的内存复制(实例讲解)
Jan 05 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 Python
ubuntu上安装python的实例方法
Sep 30 Python
详解Python绘图Turtle库
Oct 12 Python
Python修改列表值问题解决方案
Mar 06 Python
Django中从mysql数据库中获取数据传到echarts方式
Apr 07 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
利用python爬取有道词典的方法
Dec 08 Python
Django中ORM的基本使用教程
Dec 22 Python
Python 如何利用ffmpeg 处理视频素材
Nov 27 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 28 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 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
如何判断php数组的维度
2013/06/10 PHP
JQuery中getJSON的使用方法
2010/12/13 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
老生常谈ES6中的类
2017/07/31 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
python网络爬虫采集联想词示例
2014/02/11 Python
Python实现包含min函数的栈
2016/04/29 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
护士自荐信范文
2013/12/15 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
餐饮业员工工作决心书
2014/03/11 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
一岗双责责任书
2014/04/15 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL