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爬虫之打包生成exe文件
Nov 06 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
python 用所有标点符号分隔句子的示例
Jul 15 Python
django 微信网页授权登陆的实现
Jul 30 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
Python中if有多个条件处理方法
Feb 26 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 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
建立文件交换功能的脚本(二)
2006/10/09 PHP
php注销代码(session注销)
2012/05/31 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
php技巧小结【推荐】
2017/01/19 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
python批量提取word内信息
2015/08/09 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
python绘制简单彩虹图
2018/11/19 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
大学本科生的个人自我评价
2013/12/09 职场文书
中学教师培训制度
2014/01/31 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
小学生运动会广播
2015/08/19 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android