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


  • 相关阅读:
    51nod-1420-贪心
    51nod-1455-dp/缩小范围
    51nod-1574-排列转换
    简单的鼠标滚轮事件
    数组去重
    模仿jq里的选择器和color样式
    在页面里写个动态本地时间
    使用css中的flex布局弹性手风琴效果
    bootstrap中如何多次使用一个摸态框
    使用css让文字两端对齐
  • 原文地址:https://www.cnblogs.com/zhaodafa/p/8762045.html
Copyright © 2011-2022 走看看