• 模块之re模块 collections模块 random模块


    1.re模块

    import re
    使用python操作正则表达式的一个模块
    我们使用这个模块 只需要 自己写正则表达式 和 带匹配的字符
    模块名.方法名()

    1.findall 返回所有满足匹配条件的结果,放在列表里

    import re
    ret=re.findall("d+","s1dd22d3")
    print(ret)  #['1', '22', '3']
    ###findall分组和优先级效果
    import re
    ret = re.findall('[a-z]d','ab2748cdef14g239')
    print(ret) #['b2', 'f1', 'g2']
    ret = re.findall('([a-z])d','ab2748cdef14g239')
    print(ret) #['b', 'f', 'g']
    ##去掉分组的效果:
    ret = re.findall('(?:[a-z])d','ab2748cdef14g239')
    print(ret) #['b2', 'f1', 'g2']
    ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
    print(ret)
    View Code

    2.search方法:两个参数,正则表达式和待匹配的字符串

    返回的是第一个满足条件的项
    使用.group()方法就可以获取到具体的值
    需要注意的是,如果没有匹配上,使用.group()会报错
    所以应该在使用group防止之前做判断

    import re
    ret = re.search('a', 'eva agon yuan')
    print(ret) #<_sre.SRE_Match object; span=(2, 3), match='a'>
    if ret:
        print(ret.group())  #a
    ret = re.search('b', 'eva egon yuan')
    print(ret.group())   #报错AttributeError
    ##分组
    import re
    ret = re.search('([a-z])d','ab2748cdef14g239')
    print(ret.group())  #b2直接获取正则规则匹配到的项
    print(ret.group(1)) #如果给group传递参数,那么传递的参数能够代表在正则表达式中组的次序
    View Code

    3.match.自带^效果。同search,不过尽在字符串开始处进行匹配.需要用group

    import re
    ret = re.match('a', 'eva agon yuan').group()
    print(ret)  #AttributeError
    ret = re.match('av', 'ava agon yuan').group()
    print(ret)  #av
    View Code

    4.split切割

    ret=re.split("d","s1ss22dd")  #默认全部分割
    print(ret)  #['s', 'ss', '', 'dd']
    ret=re.split("d","s1ss22dd",1)
    print(ret)  #['s', 'ss22dd']
    ret = re.split('[ab]', 'a1b2c3d4')
    print(ret) # 先按'a'分割得到'''bcd',在对'''bcd'分别按'b'分割
    2.split的优先级查询:使用分组,保留切割对象
    import re
    ret=re.split("(d)","s1ss22dd")  #默认全部分割
    print(ret) #['s', '1', 'ss', '2', '', '2', 'dd']
    View Code

    5.sub替换

    import re
    ret=re.sub("d","J","sd1f4s8")
    print(ret)  #sdJfJsJ
    ret=re.sub("d","J","sd1f4s8",1)
    print(ret)  #sdJf4s8 参数限制替换的个数
    View Code

    6.subn 返回一个元组(结果,替换个数)

    import re
    ret=re.subn("d","J","sd1f4s8")
    print(ret)   #('sdJfJsJ', 3)
    View Code

    7.compile 进行编译,节省时间

    import re
    od=re.compile("d{3}")  #正则表达式编译一下得到一个结果,规则要匹配的是3个数字
    ret=od.search("as1234ds") #正则表达式对象调用search,参数为待匹配的字符串
    print(ret.group()) #123
    View Code

    8.finditer 返回一个迭代器,节省空间

    import re
    ret=re.finditer("d","as1234ds")
    # print(next(ret).group()) #1 #查看第一个结果
    # print(next(ret).group()) #2 #查看第二个结果
    print([i.group() for i in ret]) #['1', '2', '3', '4']
    View Code

    9.r 取消这个字符串中的转译作用

    凡是出现且没有特殊意义的时候都可以在字符串的前面加上r符号
    r'\n'   r'
    '
    r'app
    tp'
    ret = re.search(r"<(w+)>w+</1>","<h1>hello</h1>") #l没有特殊意义
    print(ret.group())
    View Code

    二.collections模块

    1.namedtuple: 生成可以使用名字来访问元素内容的tuple

    from collections import namedtuple
    Point=namedtuple("Point",["x","y"])
    p=Point(2,5)
    print(p)  #Point(x=2, y=5)
    print(p.x,p.y) #2 5
    View Code

    2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

    deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
    队列:先进先出 双端队列:从两端操作

    from collections import deque
    q=deque([1,2,3])
    #增加
    q.append(5)
    print(q)  #deque([1, 2, 3, 5])
    q.appendleft(88)
    print(q)  #deque([88, 1, 2, 3, 5])
    #删除
    q.pop()
    print(q)  #deque([88, 1, 2, 3])
    q.popleft()
    View Code

    3.OrderedDict: 有序字典

    from collections import OrderedDict
    dic=dict([("a",1),("b",2)])
    print(dic)  #{'a': 1, 'b': 2}
    od=OrderedDict(dic)
    print(od)    #OrderedDict([('a', 1), ('b', 2)])
    View Code

    4.defaultdict: 带有默认值的字典

    from collections import defaultdict
    dic=defaultdict(list)
    print(dic["k"],dic["k1"])  #(1) ()
    dic=defaultdict(list)
    dic["k"]=1
    print(dic["k"],dic["k1"])  #() ()
    使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:
    from collections import defaultdict
    dic=defaultdict(None)
    print(dic["k"]) #KeyError: 'k'
    dic=defaultdict(lambda : "nonum")
    dic["k1"]=2
    print(dic["k"],dic["k1"]) #nonum  2
    View Code

    5.Counter: 计数器,主要用来计数

    Counter类的目的是用来跟踪值出现的次数。以字典的键值对形式存储,其中元素作为key,其计数作为value。
    from collections import Counter
    C = Counter('abcdeabcdabcaba')
    print(C)  #Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
    View Code

    三.random模块

    ###随机小数

    print(random.random()) #无参数。在0<=n<1之间生成一个随机浮点数
    print(random.uniform(1,5)) #有参数。在指定范围生成一个随机浮点数
    ###随机整数
    应用:验证码
    print(random.randint(1,5))# 在指定范围生成一个随机整数
    print(random.randrange(1,10)) ##从指定范围内,按指定基数递增的集合中获取一个随机数
    print(random.randrange(1,10,2))
    View Code

    ##从序列中获取一个或多个随机元素

    应用:抽奖
    print(random.choice("jerd"))
    print(random.choice([1,2,3]))
    从集合中抽取数据
    print(random.sample(li,2)) 获取指定长度的片断
    View Code

    用于将一个列表中的元素打乱

    li=['12',"sd",123]
    random.shuffle(li)
    print(li)
    View Code

    验证码

    验证码纯数字
    import random
    def f_code():
        code=""
        for i in range(0,6):
            num=random.randint(0,9)
            code=code+str(num)
        return code
    print(f_code())
    #验证码:数字和字母结合
    import random
    def f_code():
        code=""
        for i in range(0,6):
            num=random.randint(0,9)
            alp=chr(random.randint(65,90))  #chr()的参数为0--255时,返回当前整数对应的ascii字符
            #alp=random.randint(A,Z) #运行错误,返回的是整数
            choice=random.choice([num,alp])
            code=code+str(choice)
        return code
    print(f_code())
    View Code

    匹配标签

    import re
    #<>内容相同
    ret = re.search('<(?P<tag>w+)>(w+)</(?P=tag)>',"<h1>hello</h1>")
    print(ret.group())
    print(ret.group('tag'))
    #<>内容不同
    ret = re.search('<(?P<tag>w+)>(w+)</(?P<mag>w+)>',"<h1>hello</h2>")
    print(ret.group('tag'))
    print(ret.group('mag'))
    print(ret.group())
    View Code

    匹配整数

    import re
    ret=re.findall("d+","1-2*(60+(-40.35/5)-(-4*3))")
    print(ret)
    #d+.d+ | d+
    ret=re.findall("d+.d+|(d+)","1-2*(60+(-40.35/5)-(-4*3))")
    ret.remove('')
    print(ret)
    View Code

    匹配小数:d+.d+

    匹配数字(包过整数):d+.?d*

    在既有整数和小数中只匹配整数:d+.d+|(d+)

  • 相关阅读:
    Spark Standalone集群搭建
    虚拟机Ubuntu磁盘扩容
    Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.ipc.ServerNotRunningYetException): org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not runn
    centos脚本编写
    centos中的shell编程
    从零开始部署hadood分布式数据平台!
    从0开始部署hadoop HA集群,使用zk实现自动容灾
    zookeeper动物园管理员学习笔记
    hive UDF
    创建视图
  • 原文地址:https://www.cnblogs.com/zgf-666/p/8540834.html
Copyright © 2020-2023  润新知