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

import shelve
info1={'age':18,'height':180,'weight':80}
序列化: d
=shelve.open('db.shv') d['egon']=info1 #['egon']就是相当于字典的key,而info1就相当于是字典的value d.close()
反序列化:
d=shelve.open('db.shv')
print(d['egon'])
d.close()
改里面的数据:
d=shleve.open('db.shv',writeback=True)
d['egon']['age']=100
d.close

 

xml模块
xml是实现不同语言或程序之进行数据交换的协议,跟json差不多,但json使用起来更加简单,但是在json还没有被研发出来的时候,大家就只能用xml,至今还有很多传统公司如金融行业的很多系统的接口还主要是xml
xml的格式如下,就是通过<>节点来区别数据结构的
xml协议在各个语言里都是支持的,在python中可以用到

print(root.iter('year'))   #全文搜索
print(root.find('country'))    #在root的子节点找,只找一个
print(root.findall('country'))    #在root的子节点找,找所有

 

re模块
1.什么是正则?
正则就是用一些具有特殊含义的符号组和到一起(称为正则表达式)来描述字符或者字符串的方法。或者说正则就是用来描述一类事物的规则。
比如我们描述:4条腿
你可能会想到是四条腿的动物或者桌子椅子等
我再描述:四条腿,活的
那就只剩四条腿的动物这一类了

2.常用匹配模式

import re
\w:匹配字母数字以及下划线
print(re.findall('\w','ab 12\+- *&_')) #['a','b','1','2','_']

\W:匹配非字母数字下划线
print(re.findall('\w','ab 12\+- *&_')) #[' ', '\\', '+', '-', ' ', '*', '&']

\s:匹配任意空白字符
print(re.findall('\s','ab \r1\n2\t\+- *&_')) #[' ', '\r', '\n', '\t', ' ']
\S:匹配任意非空字符
print(re.findall('\S','ab \r1\n2\t\+- *&_')) #['a', 'b', '1', '2', '\\', '+', '-', '*', '&', '_']
\d:匹配任意数字
print(re.findall('\d','ab \r1\n2\t\+- *&_')) #['1', '2']
\D:匹配任意非数字
print(re.findall('\D','ab \r1\n2\t\+- *&_')) #['a', 'b', ' ', '\r', '\n', '\t', '\\', '+', '-', ' ', '*', '&', '_']
\A:匹配字符串的开头
print(re.findall('\Aalex','alex is salexb')) #['alex']
\^:匹配字符串的开头
print(re.findall('^alex','alex is salexb')) #['alex']
\Z:匹配字符串的末尾
print(re.findall('sb\Z','alexsssb is sbalexbsb')) #['sb']
\$;匹配字符串的末尾
print(re.findall('sb$','alexsssb is sbalexbsb')) #['sb']

重复匹配:
. ? * + {m,n} .* .*?
. :代表除了换行符外的任意一个字符
print(re.findall('a.c','abc alc aAc aaaaaaca\nc')) #['abc', 'a1c', 'aAc', 'aac']
print(re.findall('a.c','abc a1c aAc aaaaaca\nc',re.DOTALL)) # ['abc', 'a1c', 'aAc', 'aac', 'a\nc']
? :代表左边那一个字符重复0次或1次
print(re.findall('ab?','a ab abb abbb abbbb abbbb')) #['a', 'ab', 'ab', 'ab', 'ab', 'ab']
* :代表左边那一个字符出现0次或无穷次
print(re.findall('ab*','a ab abb abbb abbbb abbbb a1bbbbbbb')) #['a', 'ab', 'abb', 'abbb', 'abbbb', 'abbbb', 'a']
+ :代表左边那一个字符出现1次或无穷次
print(re.findall('ab+','a ab abb abbb abbbb abbbb a1bbbbbbb')) #['ab', 'abb', 'abbb', 'abbbb', 'abbbb']
{m,n}:代表左边那一个字符出现m次到n次 
print(re.findall('ab?','a ab abb abbb abbbb abbbb')) #['a', 'ab', 'ab', 'ab', 'ab', 'ab']
print(re.findall('ab{0,1}','a ab abb abbb abbbb abbbb')) #['a', 'ab', 'ab', 'ab', 'ab', 'ab']
.* :匹配任意长度,任意字符——————》贪婪匹配
print(re.findall('a.*c',' ac a123c aaaa a *123)()c adssdsadsa')) #['ac a123c aaaa a *123)()c']

.*? :非贪婪匹配
print(re.findall('a.*?c','a123c456c')) #['a123c']
(): 分组
print(re.findall('(alex)_nb','alex_nb sdassadsalex_sb')) #['alex','alex']

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

[]内的^代表取反的意思
print(re.findall('a[^0-9]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc')) #['a c', 'a+c', 'a*c', 'a-c', 'acc', 'aAc']
| :或者
print(re.findall('compan(ies|y)','Too many companies , and company')) #['ies', 'y']

(?:):代表匹配成功的所有内容,而不仅仅只是括号内的内容
print(re.findall('compan(ies|y)','Too many companies , and company')) #['companies', 'company']

 

posted on 2018-04-09 23:11  muzinianhua  阅读(137)  评论(0编辑  收藏  举报