• 4/9 XML/RE/shevle 模块


    1 XML 模块

    import xml.etree.ElementTree as ET
    tree=ET.parse('a.xml')
    root=tree.getroot()
    三种查找节点的方式
    res=root.iter('rank') # 会在整个树中进行查找,而且是查找到所有
    for item in res:
    # print(item)
    print('='*50)
    print(item.tag) # 标签名
    print(item.attrib) #属性
    print(item.text) #文本内容


    res=root.find('country') # 只能在当前元素的下一级开始查找。并且只找到一个就结束
    print(res.tag)
    print(res.attrib)
    print(res.text)
    nh=res.find('neighbor')
    print(nh.attrib)


    cy=root.findall('country') # 只能在当前元素的下一级开始查找,
    print([item.attrib for item in cy])

    ==========================================>改
    import xml.etree.ElementTree as ET
    tree=ET.parse('a.xml')
    root=tree.getroot()

    for year in root.iter('year'):
    year.text=str(int(year.text) + 10)
    year.attrib={'updated':'yes'}


    # tree.write('b.xml')
    tree.write('a.xml')


    ==========================================>增
    import xml.etree.ElementTree as ET
    tree=ET.parse('a.xml')
    root=tree.getroot()

    for country in root.iter('country'):
    # print(country)
    year=country.find('year')
    # print(year)
    if int(year.text) > 2020:
    # print(country.attrib)
    # ele=ET.Element('egon')
    # ele.attrib={'nb':'yes'}
    # ele.text='非常帅'
    # country.append(ele)
    country.remove(year)
    tree.write('b.xml')

    2 shelve 模块

    import shelve
    info1={'age':18,'height':180,'weight':80}
    info2={'age':73,'height':150,'weight':80}

    d=shelve.open('db.shv')
    d['egon']=info1
    d['alex']=info2
    d.close()


    d=shelve.open('db.shv')
    # print(d['egon'])
    # print(d['alex'])
    d.close()


    d=shelve.open('db.shv',writeback=True)
    d['alex']['age']=10000
    # print(d['alex'])
    d.close()


    d=shelve.open('db.shv',writeback=True)
    print(d['alex'])
    d.close()


    import json

    l={'a':1,'b':2,'c':3}
    json.dump(l,open('a.json','wt',encoding='utf-8'))


    3 re 模块

    import re
    print(re.findall('w','ab 12+- *&_'))
    w
    print(re.findall('W','ab 12+- *&_'))
    print(re.findall('s','ab 1 2 +- *&_'))
    print(re.findall('S','ab 1 2 +- *&_'))
    print(re.findall('d','ab 1 2 +- *&_'))
    d
    print(re.findall('D','ab 1 2 +- *&_'))

    print(re.findall('w_sb','egon alex_sb123123wxx_sb,lxx_sb'))
    w_sb

    print(re.findall('Aalex','abcalex is salexb'))
    print(re.findall('Aalex','alex is salexb'))
    print(re.findall('^alex','alex is salexb'))
    print(re.findall('sb','alexsb is sbalexbsb'))
    print(re.findall('sb$','alexsb is sbalexbsb'))
    sb

    print(re.findall('^ebn$','ebn1'))
    ebn


    print(re.findall('a c','a c a c a1c'))


    重复匹配:
    . ? * + {m,n} .* .*?
    1、.:代表除了换行符外的任意一个字符
    print(re.findall('a.c','abc a1c aAc aaaaaca c'))
    a.c
    print(re.findall('a.c','abc a1c aAc aaaaaca c',re.DOTALL))

    2、?:代表左边那一个字符重复0次或1次
    print(re.findall('ab?','a ab abb abbb abbbb abbbb'))
    ab?

    3、*:代表左边那一个字符出现0次或无穷次
    print(re.findall('ab*','a ab abb abbb abbbb abbbb a1bbbbbbb'))
    ab*

    4、+ :代表左边那一个字符出现1次或无穷次
    print(re.findall('ab+','a ab abb abbb abbbb abbbb a1bbbbbbb'))
    ab+

    5、{m,n}:代表左边那一个字符出现m次到n次
    print(re.findall('ab?','a ab abb abbb abbbb abbbb'))
    print(re.findall('ab{0,1}','a ab abb abbb abbbb abbbb'))

    print(re.findall('ab*','a ab abb abbb abbbb abbbb a1bbbbbbb'))
    print(re.findall('ab{0,}','a ab abb abbb abbbb abbbb a1bbbbbbb'))

    print(re.findall('ab+','a ab abb abbb abbbb abbbb a1bbbbbbb'))
    print(re.findall('ab{1,}','a ab abb abbb abbbb abbbb a1bbbbbbb'))


    print(re.findall('ab{1,3}','a ab abb abbb abbbb abbbb a1bbbbbbb'))


    6、.*:匹配任意长度,任意的字符=====》贪婪匹配
    print(re.findall('a.*c','ac a123c aaaac a *123)()c asdfasfdsadf'))
    a.*c

    7、.*?:非贪婪匹配
    print(re.findall('a.*?c','a123c456c'))




    ():分组
    print(re.findall('(alex)_sb','alex_sb asdfsafdafdaalex_sb'))

    (alex)_sb

    print(re.findall(
    'href="(.*?)"',
    '<li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li>')
    )
    <li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li>
    href=".*?"


    []:匹配一个指定范围内的字符(这一个字符来自于括号内定义的)
    print(re.findall('a[0-9][0-9]c','a1c a+c a2c a9c a11c a-c acc aAc'))

    当-需要被当中普通符号匹配时,只能放到[]的最左边或最 右边
    print(re.findall('a[-+*]c','a1c a+c a2c a9c a*c a11c a-c acc aAc'))

    print(re.findall('a[a-zA-Z]c','a1c a+c a2c a9c a*c a11c a-c acc aAc'))


    []内的^代表取反的意思
    print(re.findall('a[^a-zA-Z]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc'))
    print(re.findall('a[^0-9]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc'))


    print(re.findall('([a-z]+)_sb','egon alex_sb123123wxxxxxxxxxxxxx_sb,lxx_sb'))
    [a-z]+_sb



    | :或者
    print(re.findall('compan(ies|y)','Too many companies have gone bankrupt, and the next one is my company'))

    (?:):代表取匹配成功的所有内容,而不仅仅只是括号内的内容
    print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next one is my company'))

    print(re.findall('alex|sb','alex sb sadfsadfasdfegon alex sb egon'))




    re模块的其他方法:
    print(re.findall('alex|sb','123123 alex sb sadfsadfasdfegon alex sb egon'))
    print(re.search('alex|sb','123213 alex sb sadfsadfasdfegon alex sb egon').group())
    print(re.search('^alex','123213 alex sb sadfsadfasdfegon alex sb egon'))

    print(re.search('^alex','alex sb sadfsadfasdfegon alex sb egon').group())
    print(re.match('alex','alex sb sadfsadfasdfegon alex sb egon').group())
    print(re.match('alex','123213 alex sb sadfsadfasdfegon alex sb egon'))


    info='a:b:c:d'
    print(info.split(':'))
    print(re.split(':',info))

    info=r'get :a.txt3333/rwx'
    print(re.split('[ :\/]',info))


    print('egon is beutifull egon'.replace('egon','EGON',1))

    print(re.sub('(.*?)(egon)(.*?)(egon)(.*?)',r'123EGON5','123 egon is beutifull egon 123'))

    (123 )(egon)( is beutifull )(egon)( 123)

    123EGON5

    print(re.sub('(lqz)(.*?)(SB)',r'321',r'lqz is SB'))
    print(re.sub('([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)',r'52341',r'lqzzzz123+ is SB'))

    (lqzzzz)(123+ )(is)( )(SB)


    pattern=re.compile('alex')
    print(pattern.findall('alex is alex alex'))
    print(pattern.findall('alexasdfsadfsadfasdfasdfasfd is alex alex'))



  • 相关阅读:
    WPF自定义控件
    NPOI设置Excel单元格字体、边框、对齐、背景色
    关于StreamReader.ReadToEnd方法
    ASP.NET Core Web多语言项目
    docker与虚拟机的区别
    C# Task.Run 和 Task.Factory.StartNew 区别
    MVC的SignalR例子
    深圳游玩攻略
    一个域名下多个Vue项目
    Linq的执行效率及优化
  • 原文地址:https://www.cnblogs.com/seanliang/p/8762301.html
Copyright © 2020-2023  润新知