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装饰器decorator用法实例
Nov 10 Python
在Python的Django框架上部署ORM库的教程
Apr 20 Python
Python unittest单元测试框架总结
Sep 08 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
Python socket实现多对多全双工通信的方法
Feb 13 Python
python3.x 生成3维随机数组实例
Nov 28 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
Python基于class()实现面向对象原理详解
Mar 26 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
python 解决微分方程的操作(数值解法)
May 26 Python
Python-OpenCV教程之图像的位运算详解
Jun 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带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
python字典的遍历3种方法详解
2019/08/10 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
python 实现端口扫描工具
2020/12/18 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
Java的for语句中break, continue和return的区别
2013/12/19 面试题
校园自助餐厅的创业计划书
2013/12/26 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
入党函调证明材料
2014/12/24 职场文书
求职自荐信怎么写
2015/03/04 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
军训后的感想
2015/08/07 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python