Python学习 16day__高级语法

结构化文件储存

- 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

- 是一个计算机科学的概念
- 用于使用单个字符串来描述,匹配符合某个规则的字符串
- 常常用来检索,替换某些模式的文本
正则的写法
- .(点号):表示任意一个字符,除了\n,比如查找所有的一个字符\.
- []: 匹配中括号中举例的任意字符,比如[Y,L,0]
- \d: 任意一个数字
- \D: 除了数字都可以
- \s:表示空格,tab键
- \S:除了空白符号
- \w:单词字符,就是 a-z,A-Z,0-9,_
- \W:除了\wd的字符外
- *: 表示前面内容重复零次或者多次, \W*
- +: 表示前面内容至少出现一次
- ?: 前面才出现的内容零次或者一次
- {m,n}: 允许前面内容出现最少m次,最多n次
- ^: 匹配字符串的开始
- $: 匹配字符串的结尾
- \b: 匹配单词的边界
- ():对正则表达式内容进行分组,从第一个括号开始,编号逐渐增大
- \A: 只匹配字符串开头
- \Z: 只匹配字符串末尾
- |: 左右任意一个
- (?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())

 

posted @ 2018-08-13 20:25  Burtit  阅读(176)  评论(0编辑  收藏  举报