结构化文件储存
- xml, json,
- 为了解决不同设备之间信息交换问题
## xml,可扩展标记语言
标记语言:语言中使用尖括号括起来的文本字符串标记
可拓展:用户可以自己定义需要的标记
例子:
<Teacher>
自定义标记Teacher
在两个标记之间任何任容都应该跟Teacher有关
</Teacher>
xml描述的是数据本身,即数据的结构和语义
html侧重点在于如何显示web页面的数据
xml文档的构成
- 处理指令(可以认为一个文件只有一个处理指令)
- 根元素(一个文件内只有一个根元素)
- 子元素
- 属性
- 内容
- 注释
DOM
是w3c规定的xml编程接口
一个xml文件在缓存中以树形储存,读取
用途:
定位浏览xml任何一个节点信息
添加删除相应内容
minidom
- minidom。parse(filename):加载读取的xml文件,filename也可以是xml代码
- doc.documentElement:获取xml文档对象,一个xml文件只有一个对应的文档对象
- node.getAttribute(attr_name):获取xml节点的属性值
- node.getElementByTagName(tage_name):得到一个节点对象集合
- node.childNodes:得到所有孩子节点
- node.childNodes[index].nodeValue:获取单个节点值
- node.firstNode:得到第一个节点,等价于node.childNodes[0]
- node.attributes[tage_name]
etree
以树形结构来表示xml
root.getiterator:得到相应的可迭代的node集合
root.iter
find(node_name):查找指定node_name的节点,返回一个node
root.findall(node_name):返回多个node_name的节点
node.tag:node对应的tagename
node.test:node文本文档
node.attrib:是node的属性的字典类型的内容
xml文件写入
更改
- ele.set:修改属性
- ele.append:添加子元素
- ele.remove:删除元素
JSON
- JSON(JavaScriptObjectNotation)
量级的数据包交换格式,基于ECMAScript
json格式是一个键值对形式的数据集
- key:字符串
- value: 字符串,数字,列表,json
- json使用大括号包裹
- 键值对直接用逗号隔开
student={
"name": "xiaobai"
"age": 18
"mobile": "123456789"
}
json和python格式的对应
- 字符串:字符串
- 数字:数字
- 列队:list
- 对象:dict
- 布尔值:布尔值
python for json
- json包
- json和python对象的转换
- json.dumps():对数据吧编码,把python格式表示成json格式
- json.loads():对数据解码,把json格式转换成python格式
- python读取json文件
- json.dump():把内容写入文件
- json.load():把json文件内容读入python
正则表达式 re
- 是一个计算机科学的概念
- 用于使用单个字符串来描述,匹配符合某个规则的字符串
- 常常用来检索,替换某些模式的文本
正则的写法
- .(点号):表示任意一个字符,除了
,比如查找所有的一个字符.
- []: 匹配中括号中举例的任意字符,比如[Y,L,0]
- d: 任意一个数字
- D: 除了数字都可以
- s:表示空格,tab键
- S:除了空白符号
- w:单词字符,就是 a-z,A-Z,0-9,_
- W:除了wd的字符外
- *: 表示前面内容重复零次或者多次, W*
- +: 表示前面内容至少出现一次
- ?: 前面才出现的内容零次或者一次
- {m,n}: 允许前面内容出现最少m次,最多n次
- ^: 匹配字符串的开始
- $: 匹配字符串的结尾
- : 匹配单词的边界
- ():对正则表达式内容进行分组,从第一个括号开始,编号逐渐增大
- A: 只匹配字符串开头
- : 只匹配字符串末尾
- |: 左右任意一个
- (?P<name>...): 分组,除了原来的标号在制定一个别名
- (?P=name): 引用分组
re使用大致步骤
使用compile将表示正则的字符串编译为一个pattern对象
通过pattern对象提供一系列方法对文本进行查找匹配,过的匹配结果,一个Match对象
最后使用March对象提供的属性和方法获得信息,根据需要进行操作
Re常用函数
- group(): 获得一个或者多个分组匹配的字符串,当要获得整个字符串时直接使用gourp或者goup(0)
- start: 获取分组匹配的字符串在整个字符串的起始位置,参数默认为0
- end: 获取分组匹配的字符串在整个字符串中的结束位置,参数默认为0
- spend: 返回的结构(start(gourp), end(group))
1 # 导入模块
2
3
4 import re
5 # compile将表示正则的字符串编译为一个pattern对象
6 # 查找数字
7 # r表示后面的字符串不转义
8 p = re.compile(r'd')
9 m = p.match("1aaa156489646asg4s6")
10 print(m)
sub替换
sub(rep1,str[,count])
1 import re
2
3 p = re.compile(r'(w+) (w+)')
4 s = "i 123 love python"
5 rst = p.sub(r'Hello word', s)
6 print(rst)
匹配中文
大部分的中文内容表示范围是[u4e00-u9fa5],不包括全角标点
1 import re
2
3 title = u'世界 你好, Hello world'
4 p = re.compile(r'[u4e00-u9fa5]+')
5 rst = p.findall(title)
6 print(rst)
贪婪和非贪婪
贪婪:尽可能多的匹配,(*)表示贪婪匹配
非贪婪:找到符合条件的最小内容即可,(?)表示非贪婪
正则默认使用贪婪匹配
1 import re
2
3 title = u'<div>name</div><div>age</div>'
4 # 贪婪匹配
5 p1 = re.compile(r"<div>.*</div>")
6 # 非贪婪匹配
7 p2 = re.compile(r"<div>.*?</div>")
8
9 print(p1.search(title).group())
10 print(p2.search(title).group())