zoukankan      html  css  js  c++  java
  • shelve,xml,re模块


    一、shelve模块

    shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型

    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()

    二 、xml模块

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不
    在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。
    xml的格式就是通过<>节点来区别数据结构的:
    xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml:
    print(root.iter('year')) #全文搜索
    print(root.find('country')) #在root的子节点找,只找一个
    print(root.findall('country')) #在root的子节点找,找所有
    三、re模块

    什么是正则?
     正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是
    用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列
    的字节码,然后由用 C 编写的匹配引擎执行。

    常用匹配模式(元字符):

            

            
    重复匹配:. ? * + {m,n} .* .*?

    1、.:代表除了换行符外的任意一个字符
    print(re.findall('a.c','abc a1c aAc aaaaaca 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'))

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

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

    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'))

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

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

    8、():分组
    print(re.findall('(alex)_sb','alex_sb asdfsafdafdaalex_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>


    9、[]:匹配一个指定范围内的字符(这一个字符来自于括号内定义的)
    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'))


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

    /11、(?:):代表取匹配成功的所有内容,而不仅仅只是括号内的内容
    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('e','alex make love') ) #['e', 'e', 'e'],返回所有满足匹配条件的结果,放在列表里

    print(re.search('e','alex make love').group()) #e,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象
    可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

    print(re.match('e','alex make love')) #None,同search,不过在字符串开始处进行匹配,完全可以用search+^代替match

    print(re.split('[ab]','abcd')) #['', '', 'cd'],先按'a'分割得到''和'bcd',再对''和'bcd'分别按'b'分割
    info=r'get :a.txt3333/rwx'
    print(re.split('[ :\/]',info))

    print('===>',re.sub('a','A','alex make love')) #===> Alex mAke love,不指定n,默认替换所有
    print(re.sub('(.*?)(egon)(.*?)(egon)(.*?)',r'123EGON5','123 egon is beutifull egon 123'))
    (123 )(egon)( is beutifull )(egon)( 123)

    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') #将re.compile('alex')赋值个pattern 可以再次直接调用pattern使用
    print(pattern.findall('alex is alex alex'))
    print(pattern.findall('alexasdfsadfsadfasdfasdfasfd is alex alex'))


  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/zhaodafa/p/8762045.html
Copyright © 2011-2022 走看看