• 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

    - 是一个计算机科学的概念
    - 用于使用单个字符串来描述,匹配符合某个规则的字符串
    - 常常用来检索,替换某些模式的文本
    正则的写法
    - .(点号):表示任意一个字符,除了 ,比如查找所有的一个字符.
    - []: 匹配中括号中举例的任意字符,比如[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())
  • 相关阅读:
    Jquery实现form表单提交后局部刷新页面的多种方法
    HTML5:'data-'属性的作用是什么
    ASP.NET MVC传递Model到视图的多种方式总结(二)__关于ViewBag、ViewData和TempData的实现机制与区别
    Var与Dynamic的区别
    ASP.NET MVC传递Model到视图的多种方式总结(一)__通用方式的使用
    动态规划(最大公共子序列)
    后缀名为properties,config和xml的文件内容读取
    初学者易犯的的错误
    jdk1.6与Myeclipse的冲突造成的
    微信红包算法思想
  • 原文地址:https://www.cnblogs.com/Burtit/p/9470704.html
Copyright © 2020-2023  润新知