py5.21

#collections模块
#namedtuple: 给元祖中的元素定义。
from collections import namedtuple
# stuct_time = namedtuple('l_time',('year','month','day','mday','wday'))
# tu = stuct_time('2018','5','21','108','1')
# print(tu.year)
#queue: 数据容器,先进先出。进去的数据放在一个黑盒中,看不到
# import queue
# l = queue.Queue()
# l.put(1)
# l.put(2)
# print(l.get())  #第一个值 1
#deque 双向队列,可以两边加入.append() .appendleft()  .pop() .popleft()
from collections import deque
# l = deque()
# l.append(1)
# l.appendleft(2)
# print(l)
# print(l.pop()) #默认删除最后一个
#OrderedDict: 使字典有序 ([(,),(,),(,)])
from collections import OrderedDict
# dic = OrderedDict([('a',2),('c',1),('b',3)])
# print(dic)
# dic['z'] = 1
# print(dic)
#defalutdict:设置默认值
# from collections import defaultdict
# dic = defaultdict(list) #设置默认值是[]
# print(dic['a'])         #查找的时候自动将‘键’和默认的值加进去
# print(dic['b'])
# print(dic)
View Code
#正则表达式
#一、判断字符串是否符合要求
#二、找到一串字符串中符合要求的内容
#字符组  [] : 约束一个字符,可以设置范围。
#元字符 \w[数字、字母、下划线] \s[空格、\n\t] \d[数字] : 与字符组一样,只能约束一个字符。
#       \W 非                  \S 非           \D 非
#^ ...: 字符串必须以...开头。一定要放在...前面。  [^ ...]: 非...
#$ :字符串必须以...结尾。一定要放在...后面。
#^...$ : 匹配的内容必须是中间的... 一模一样的。
#| : 或。 例:ab | abc则会找到ab就停止,所以前面一定要放长的。
#匹配11位电话号码:
# print(re.findall('1[3-9]\d{9}','18842697252')) #字符组的范围[3-9]中间是- 。
# 控制\d的出现次数:
#                  {9} \d出现9次
#                  {1,}  \d出现至少1次
#                 {1,4} \d出现1~4次都行,不少于1次不多于4次
#                   +   1次或以上
#                   *   0次或以上
#                   ?  0次或1次
#身份证号:
#第一种:
# ret = re.search('[1-9]\d{14}(\d{2}[\dx])?','211121199910112005')
# print(ret.group())
#第二种(用或“|”)
# ret = re.search('^[1-9]\d{16}[\dx]|[1-9]\d{14}$','211121199910112005888')
# print(ret.group())
# print(re.findall('>.*?<','>hoagnejd<fjuejk<hehnd')) #>hoagnejd<
#\ :转意
#.*?:表示找到?后面的字符前重复最小次数。最小0次。直到找到时停止。
#如果不加?,则*会没有限制然后一直找到最后,再回溯回来找< 。#结果就会为 >hoagnejd<fjuejk<
#findall:生成一个列表。找到所有符合条件的结果,然后放到一个列表里。
# print(re.findall('\d+','123jsdha889')) #['123','889']
#默认只显示分组中的值。解决:(?: ...)如:
# print(re.findall('\w{1}(\d+)','_123'))
# print(re.findall('\w{1}(?:\d+)','_123')) #再分组中加?: 则改变默认输出。
# g = re.findall('\d+\.\d+|(\d+)','hae12hoa385h40.35ha')   #取字符串中的整数
# g.remove('')      #对整数分组以后,小数显示出来是空格,然后去掉空格,就能取到字符串中的整数了。
# print(g)            #或者的情况,其中一个分组以后,另一种情况的结果显示空格。
#search: 生成一个对象,找到符合条件的第一个结果。
# g = re.search('\d+','hai8374jah22jh')
# print(g.group())       #8374
#match: 生成一个对象,必须以正则的条件开头,结果为开头的字符串。
# g = re.match('ab','ab888')
# print(g.group())
#split:生成一个列表。以正则的条件分割。
# print(re.split('\d+','joiae83nhe93nd9304nw'))
#多个字母的话,字母要放在[]中,就从左到右依次分割。
# print(re.split('[ohn]','joiae83nhe93nd9304nw'))
#sub/subn: sub是按照正则的'旧''新'来替换字符串中的字符。 subn是除替换后的结果还有替换了的次数
# print(re.sub('a','l','aunjunaie'))          #生成的就是替换后的字符串
# print(re.subn('a','l','aunjunaie'))         #生成的是一个元祖(字符串,次数)
#complie:如果同一个正则需要用很多次时,可以先将次正则编译,然后再对其它各种字符串进行操作。
# ret = re.compile('\d+')
# print(ret.split('183huend993jaiek33'))
# g = ret.search('hehie93ni390nje0')
# print(g.group())
#finditer:将符合条件的结果放进迭代器中
# ret = re.finditer('\d+','he00ha93dkk33m4')
# ret1 = next(ret)    #next()一下只显示第一条
# ret2 = ret1.group()
# print(ret2)
# for i in ret:
#     print(i.group())
#group(): ()中: 默认0, 全部
#                    1,显示第一个分组 2,显示第二个分组
#                  组名,显示次组的值。
#需要两个分组匹配的值相等。第一种:\\1   第二种:(?P <组名>正则) (?P= 组名)   P必须大写。
# ret = re.search('(?P<tag>\w+)\*(?P=tag)','h1*h1')
# ret = re.search('(?P<tag>\w+)\*\\1','h1*h1')      #\\1不需要分组括号。
# print(ret.group())
# print(ret.group(1))
# print(ret.group('tag'))
#爬虫
View Code

一、正则表达式

二、collections模块

猜你喜欢

转载自www.cnblogs.com/liujjpeipei/p/9069266.html