**
python基础总结(02)
**
目录
大范甘迪
1、XML速成
XML 是一种描述层次结构化数据的通用方法。XML 文档包含由起始和结束标签(tag)分隔的一个或多个元素(element)。以下也是一个完整的(虽然空洞)XML 文件:
<foo> ①
</foo> ②
- 这是 foo 元素的起始标签。
- 这是 foo 元素对应的结束标签。就如写作、数学或者代码中需要平衡括号一样,每一个起始标签必须有对应的结束标签来闭合(匹配)。
元素可以嵌套到任意层次。位于 foo 中的元素 bar 可以被称作其子元素。
<foo>
<bar></bar>
</foo>
元素可以有其属性(attribute),它们是一些名字‐值(name‐value)对。属性由空格分隔列举在元素的起始标签中。一个元素中属性名不能重复。属性值必须用引号包围起来。单引号、双引号都是可以。
<foo lang='en'> ①
<bar id='papayawhip' lang="fr"></bar> ②
</foo>
- foo 元素有一个叫做 lang 的属性。lang 的值为 en
- bar 元素则有两个属性,分别为 id 和 lang。其中 lang 属性的值为 fr。它不会与 foo 的那个属性产生冲突。每个元素都其独立的属性集。
2、解析XML
Python可以使用几种不同的方式解析XML文档。它包含了DO和SAX解析器,但是我们焦点将放在另外一个叫做ElementTree的库上边。
>>> import xml.etree.ElementTree as etree ①
>>> tree = etree.parse('examples/feed.xml') ②
>>> root = tree.getroot() ③
>>> root ④
<Element {http://www.w3.org/2005/Atom}feed at cd1eb0>
- ElementTree 属于 Python 标准库的一部分,它的位置为
xml.etree.ElementTree。 - parse()函数是ElementTree库的主要入口,它使用文件名或者流对象作为参数。parse()函数会立即解析完整个文档。如果内存资源紧张,也可以增量式地解析XML文档
- parse()函数会返回一个能代表整篇文档的对象。这不是根元素。要获得根元素的引用可以调用 getroot()方法。
- 如预期的那样,根元素即 http://www.w3.org/2005/Atom 名字空间中的 feed。该字符串表示再次重申了非常重要的一点:XML 元素由名字空间和标签名(也称作本地名(local name))组成。这篇文档中的每个元素都在名字空间 Atom 中,所以根元素被表示{http://www.w3.org/2005/Atom}feed。
注意:ElementTree 使用{namespace}localname 来表达 XML 元素。
3、元素即列表
在 ElementTree API 中,元素的行为就像列表一样。列表中的项即该元素的子元素。
4、属性即字典
XML 不只是元素的集合;每一个元素还有其属性集。一旦获取了某个元素的引用,我们可以像操作 Python 的字典一样轻松获取到其属性。
5、序列化PYTHON对象
序列化的概念很简单。内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人。你会怎么做?嗯, 这取决于你想要怎么保存,怎么重用,发送给谁。很多游戏允许你在退出的时候保存进度,然后你再次启动的时候回到上次退出的地方。(实际上, 很多非游戏程序也会这么干。) 在这个情况下,一个捕获了当前进度的数据结构需要在你退出的时候保存到磁盘上,接着在你重新启动的时候从磁盘上加载进来。这个数据
只会被创建它的程序使用,不会发送到网络上,也不会被其它程序读取。因此,互操作的问题被限制在保证新版本的程序能够读取以前版本的程序创建的数据。
在这种情况下,pickle 模块是理想的。它是 Python 标准库的一部分, 所以它总是可用的。它很快; 它的大部分同 Python 解释器本身一样是用 C 写的。 它可以存储任意复杂的 Python 数据结构。
pickle协议已经存在好多年了,它随着Python本身的成熟也不断
成熟。现在存在四个不同版本 的pickle协议。
• Python 1.x 有两个 pickle 协议,一个基于文本的格式(“版本 0”)以及一个二进制格式(“版本 1”).
• Python 2.3 引入了一个新的 pickle 协议(“版本 2”) 来处理Python 类对象的新功能。它是一个二进制格式。
• Python 3.0 引入了另一个 pickle 协议 (“版本 3”) ,显式的支持bytes 对象和字节数组。它是一个二进制格式。
6、JSON与pickle区别
pickle模块使用的数据格式是Python特定的。它没有做任何兼容其它编程语言的努力。JSON “JavaScript Object Notation” 是跨语言兼容的。
Python 3 在标准库中包含了一个 json模块,json模块包含一些函数,可以序列化数据结构,保存序列化后的数据至磁盘,从磁盘上读取序列化后的数据,将数据反序列化成新的Pythone对象。
- JSON数据格式是基于文本的, 不是二进制的
- 所有的JSON值都是大小写敏感的
- JSON允许在值之间有任意数目的空白(空格, 跳格, 回车,换行)。这意味着 JSON 编码器可以按它们的喜好添加任意多或任意少的空白。
- JSON 用纯文本编码数据,但是你知道, “不存在纯文本这种东西。JSON必须以Unicode 编码(UTF‐32, UTF‐16, 或者默认的, UTF‐8)方式存储。
7、将PYTHON数据类型映射到JSON
由于 JSON 不是 Python 特定的,对应到 Python 的数据类型的时候有很多不匹配。有一些仅仅是名字不同,但是有两个Python 数据类型完全缺少,元组和 & 字节串(bytes)
JSON | Python3 |
---|---|
object | object |
array | list |
string | string |
integer | integer |
real number | float |
true | True |
false | False |
null | None |
所有的 JSON 值都是大小写敏感的 |
8、从JSON文件加载数据
类似 pickle 模块,json 模块有一个 load()函数接受一个流对象,从中读取 JSON 编码过的数据, 并且创建该 JSON 数据结构的 Python 对象的镜像。