2018-06-27-Python全栈开发day22-part2-xml模块和re模块-正则表达式介绍

1.xml模块

  xml模块是在json出现之前,普遍使用的文件类型,

  

<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year updated="yes">2010</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year updated="yes">2013</year>
        <gdppc>59900</gdppc>
        <neighbor direction="N" name="Malaysia" />
    </country>
    </data>

这是xml的类型,其中<data>是tree,是个树形结构,并且以tree结尾

    root.get.root()--得到根

  首先遍历xml文件

  

import xml.etree.ElementTree as ET

tree=ET.parse('xml_lesson')
root=tree.getroot()

之后print(root.tag),得到的结果就是data

 

for i in root:#遍历root,得到的每个值都是data下的数据
    print(i.tag)#输出数据的标签
    print(i.attrib)#输出每个标签的属性
    for j in i:
        print(j.tag)#继续输出每个标签
        print(j.attrib)#输出属性

属性是用来对标签进行描述的

  1.1 对xml文件进行增删改查

扫描二维码关注公众号,回复: 1774505 查看本文章

    

for i in root.findall('country'):#遍历xml文件中,所有标签为country的
    rank=int(i.find('rank').text)#找到country中属性为rank的
    if rank>50:
        root.remove(i)#如果rank大于50则删除
tree.write('xmltree.xml')#写入文件

  1.2新建xml文件并写入数据

  

new_xml=ET.Element('yehiabin')#新建一个根为yehaibin的xml文件
name=ET.SubElement(new_xml,'name',attrib={'enrolled':'yes'})#在根下面创建name标签,并且通过属性进行修饰
age=ET.SubElement(new_xml,'age',attrib={'hahah':'no'})#另外增加一个标签
sex=ET.SubElement(new_xml,'sex')
sex.text='20'#.text是标签中数字

et=ET.ElementTree(new_xml)#写入文件

2. re模块-正则表达式

   正则表达式,对字符串进行模糊匹配,在查找数据以及在web中有很多的应用场景

  简介

  2.1 . 通配符

    .点这个符号,可以代表除\外的任何符号,来 进行模糊匹配

  2.2 ^$

    代表从开头以什么开始,和在结尾以什么结束

  2.3关于重复的

    2.3.1 *

      表示重复0次或者无穷多次

    2.3.2 +

      表示重复1次或者无穷多次

    2.3.3 ?

      重复0或1次

    2.3.4 {1,8}

      重复1-8次

  2.4 []

    中括号,在中括号内部特殊符号都不起作用,除了-,^, \

    其中,^在中括号内,是非的意思,中括号中的\,可以让有意义的变为没意义,没意义的变成有意义

          其中:

            \d-取任何十进制的数

            \D-与\d相反

            \s--取任何空白字符

             \S---与\s相反

             \w-取任何字母和数字

              \W---与\w相反

        并且在使用\w这些符号时,要考虑到,re本身就是一种微型语言,我们在将\b等数据传给python解释器时,python会翻译一遍之后再给re。翻译之后的数已经失去了原来的意义,所以要\\b,因为re模块只认识\\b

    

    只能从[]中取出一个值进行匹配

    其内部的元素起到或的作用

    

a=re.findall('x[xyu]','xy0')
print(a)
--
['xy']

    2.5 |

    管道符,也是或的意思

    2.6()

    分组,将某几个元素进行组合然后进行匹配

    

a=re.findall('(bc)+','askfjhbcbcjkhfdksa')
print(a)

      2.6.1 固定搭配

        

a=re.search('(?P<yehaibin>\d+)','546kfdgjldfk').group()
print(a)

  2.7 findall()

    找到所有符合匹配的,并且放到列表中

  2.8 search()

    只找到第一格,然后返回值

  2.9 match()

    

b=re.match('\d+','dsjhfdi5456')
print(b)

    从头开始找,如果开头没有则返回none

  2.10 split()

    

a=re.split('ab','abc')
print(a)
--
['','c']
先对ab进行分割,对应匹配的ab左边没有东西,所以得到空的字符串,和'c',然后ab再跟c进行匹配,没有匹配上,输出c

  2.11 sub() 替换

    

a=re.sub('\d','abc','fhsdk3fhsdk')
print(a)--
fhsdkabcfhsdk

    一共有三个参数,第一个是匹配的方式,第二个是替换之后的呢日荣,第三个是需要查找的对象,然后进行替换

  2.12compile() 编译

    直接先制定规则,之后可以重复用

    com=re.complie('\d+)

    res=com.findall('sfhkfds2kjdsl)

    这样就可以对多个对象进行查询,这样就不用重复写匹配规则

  2.13 finditer()

    将匹配的东西放到一个迭代器中

猜你喜欢

转载自www.cnblogs.com/hai125698/p/9236512.html