《Python语言及其应用》读书笔记(7)之第8章数据的归宿(关键词:数据)
来源:互联网 发布:mac os x系统更新失败 编辑:程序博客网 时间:2024/06/07 10:14
第8章数据的归宿
8.1 文件输入/输出
8.1.1 使用write()写文本文件
8.1.2 使用read()、readline()或者readlines()读文本文件
8.1.3 使用write()写二进制文件
8.1.4 使用read()读二进制文件
8.1.5 使用with自动关闭文件
Python 的上下文管理器(context manager)会清理一些资源,例如打开的文件。它的形式为 with expression as variable:
>>> with open('relativity', 'wt') as fout:... fout.write(poem)...
完成上下文管理器的代码后,文件会被自动关闭。
8.1.6 使用seek()改变位置
无论是读或者写文件, Python 都会跟踪文件中的位置。函数 tell() 返回距离文件开始处的字节偏移量。 函数 seek() 允许跳转到文件其他字节偏移量的位置。这意味着可以不用从头读取文件的每一个字节,直接跳到最后位置并只读一个字节也是可行的。
8.2 结构化的文本文件
对于简单的文本文件,唯一的结构层次是间隔的行。然而有时候需要更加结构化的文本,用于后续使用的程序保存数据或者向另外一个程序传送数据。
结构化的文本有很多格式,区别它们的方法如下所示。
- 分隔符,比如 tab(’\t’)、逗号(’,’)或者竖线(’|’)。逗号分隔值(CSV)就是这样的例子。
- ‘<’ 和 ‘>’ 标签,例如 XML 和 HTML。
- 标点符号,例如 JavaScript Object Notation(JSON2)。
- 缩进,例如 YAML(即 YAML Ain’t Markup Language 的缩写),要了解更多可以去搜索。
- 混合的,例如各种配置文件。
每一种结构化文件格式都能够被至少一种 Python 模块读写。
8.2.1 CSV
带分隔符的文件一般用作数据交换格式或者数据库。你可以人工读入 CSV 文件,每一次读取一行,在逗号分隔符处将每行分开,并添加结果到某些数据结构中,例如列表或者字典。但是,最好使用标准的 csv 模块,因为这样切分会得到更加复杂的信息。
- 除了逗号,还有其他可代替的分隔符: ‘|’ 和 ‘\t’ 很常见。
- 有些数据会有转义字符序列, 如果分隔符出现在一块区域内,则整块都要加上引号或者在它之前加上转义字符。
- 文件可能有不同的换行符, Unix 系统的文件使用 ‘\n’, Microsoft 使用 ‘\r\n’, Apple之前使用 ‘\r’ 而现在使用 ‘\n’。
- 在第一行可以加上列名。
8.2.2 XML
带分隔符的文件仅有两维的数据:行和列。如果你想在程序之间交换数据结构,需要一种方法把层次结构、序列、集合和其他的结构编码成文本。
XML 是最突出的处理这种转换的标记(markup) 格式,它使用标签(tag) 分隔数据。
XML 通常用于数据传送和消息,它存在一些子格式, 如RSS和Atom。
XML 的灵活性导致出现了很多方法和性能各异的 Python 库。
在 Python 中解析 XML 最简单的方法是使用 ElementTree。
8.2.3 HTML
8.2.4 JSON
JavaScript Object Notation(JSON, http://www.json.org)是源于 JavaScript 的当今很流行的数据交换格式, 它是 JavaScript 语言的一个子集,也是 Python 合法可支持的语法。对于Python 的兼容性使得它成为程序间数据交换的较好选择。
8.2.5 YAML
和 JSON 类似, YAML(http://www.yaml.org)同样有键和值,但主要用来处理日期和时间这样的数据类型。 标准的 Python 库没有处理 YAML 的模块,因此需要安装第三方库yaml(http://pyyaml.org/wiki/PyYAML)操作数据。 load() 将 YAML 字符串转换为 Python 数据结构,而 dump() 正好相反。
8.2.6 安全提示
8.2.7 配置文件
8.2.8 其他交换格式
8.2.9 使用pickle序列化
存储数据结构到一个文件中也称为序列化(serializing)。像 JSON 这样的格式需要定制的序列化数据的转换器。 Python 提供了 pickle 模块以特殊的二进制格式保存和恢复数据对象。
8.3 结构化二进制文件
8.4 关系型数据库
8.4.1 SQL
8.4.2 DB-API
8.4.3 SQLite
8.4.4 MySQL
8.4.5 PostgreSQL
8.4.6 SQLAlchemy
你可以在以下层级上使用 SQLAlchemy:
- 底层负责处理数据库连接池、执行 SQL 命令以及返回结果,这和 DB-API 相似;
- 再往上是 SQL 表达式语言,更像 Python 的 SQL 生成器;
- 较高级的是对象关系模型(ORM),使用 SQL 表达式语言,将应用程序代码和关系型数据结构结合起来。
随着内容的深入,上面提到的术语会变得熟悉。 SQLAlchemy 实现在前面几节提到的数据库驱动程序的基础上。因此不需要导入驱动程序,初始化的连接字符串会作出分配,例如:
dialect + driver :// user : password @ host : port / dbname
字符串中的值代表如下含义。
- dialect
数据库类型。
- driver
使用该数据库的特定驱动程序。
- user 和 password
数据库认证字符串。
- host 和 port
数据库服务器的位置(只有特定情况下会使用端口号 :port)。
- dbname
初始连接到服务器中的数据库。
表 8-5 列出了常见方言和对应的驱动程序。
1.引擎层
2.SQL表达式语言
3.对象关系映射
8.5 NoSQL数据存储
有些数据库并不是关系型的,不支持 SQL。它们用来处理庞大的数据集、支持更加灵活的数据定义以及定制的数据操作。 这些被统称为NoSQL(以前的意思是 no SQL,现在理解为 not only SQL)。
8.5.1 dbm family
dbm 格式在 NoSQL 出现之前已存在很久了,它们是按照键值对的形式储存, 封装在应用程序(例如网页浏览器)中, 来维护各种各样的配置。从以下角度看, dbm 数据库和 Python字典是类似的:
- 给一个键赋值,自动保存到磁盘中的数据库;
- 通过键得到对应的值。
8.5.2 memcached
memcached(http://memcached.org/)是一种快速的、内存键值对象的缓存服务器。它一般置于数据库之前, 用于存储网页服务器会话数据。
连接到一个 memcached 服务器之后,可以做以下事项:
- 赋值和取值
- 其中一个值的自增或者自减
- 删除其中一个键
数据在 memcached 并不是持久化保存的,后面的可能会覆盖早些写入的数据,这本来就是它的固有特性, 因为它作为一个缓存服务器,通过舍弃旧数据避免程序运行时内存不足的问题
8.5.3 Redis
Redis(http://redis.io/)是一种数据结构服务器(data structure server)。和 memcached 类似,Redis 服务器的所有数据都是基于内存的(现在也可以选择把数据存放在磁盘)。不同于memcached, Redis 可以实现:
- 存储数据到磁盘,方便断电重启和提升可靠性;
- 保存旧数据;
- 提供多种数据结构,不限于简单字符串。
Redis 的数据类型和 Python 很相近, Redis 服务器会是一个或多个 Python 应用程序之间共享数据的非常有帮助的中间件。
8.5.4 其他的NoSQL
8.6 全文数据库
参考文献:
1. 《Python语言及其应用》。
- 《Python语言及其应用》读书笔记(7)之第8章数据的归宿(关键词:数据)
- 《Python语言及其应用》读书笔记(6)之第7章像高手一样玩转数据(关键词:数据)
- 《Python语言及其应用》读书笔记(8)之第9章剖析Web(关键词:Web)
- 《Python语言及其应用》读书笔记(9)之第10章系统(关键词:系统)
- 《Python语言及其应用》读书笔记(3)之第4章Python外壳:代码结构(关键词:)
- 《Python语言及其应用》读书笔记(5)之第6章对象和类(关键词:对象/类)
- 《Python语言及其应用》读书笔记(10)之第11章并发和网络(关键词:并发/网络)
- 《Python语言及其应用》读书笔记(11)之第12章成为真正的Python开发者(关键词:测试/调试/优化)
- 《Python语言及其应用》读书笔记(1)之第2章Python基本元素:数字、字符串和变量(关键词:数字/字符串/变量)
- 《Python语言及其应用》读书笔记(2)之第3章Python容器:列表、元组、字典与集合(关键词:列表/元组/字典/集合)
- 《Python语言及其应用》读书笔记(4)之第5章Python盒子:模块、包和程序(关键词:模块/包/程序)
- 【第8章】数据的归宿
- 《Python基础教程》读书笔记(3)之第8章异常(关键词:Python/异常/try/except/finally)
- 《Python基础教程》读书笔记(2)之第7章更加抽象(关键词:Python/面向对象/多态/封装/方法/继承)
- 7.5-Python-语言及其应用-笔记-数据的归属-未完!
- 《数据结构与算法-Python语言描述》读书笔记(7)第7章图(关键词:数据结构/算法/Python/图)
- 《数据结构与算法-Python语言描述》读书笔记(4)第4章字符串(关键词:数据结构/算法/Python/字符串)
- 《数据结构与算法-Python语言描述》读书笔记(9)第9章排序(关键词:数据结构/算法/Python/排序)
- java学习记录(4) -加密算法AES, MD5编码, 图片转Base64
- 读《许三观卖血记》读后感
- JAVA学习篇--Servlet详解
- 数组与矩阵---未排序数组中累加和小于或等于给定值的最长子数组问题
- JS数据结构:链表
- 《Python语言及其应用》读书笔记(7)之第8章数据的归宿(关键词:数据)
- Android使用SVG小结
- 微信支付那些特别的坑
- JAVA中的反射机制
- 1008. 数组元素循环右移问题 (20)
- 如何判断所捕获的异常类型,并根据其进行优雅处理
- 密码学之hill密码
- shell命令-grep常用命令
- unity总结(0916)