python内置模块

一、re模块

    基本操作方法

import re

s = 'abacbacbd'
# 第一个参数填写正则表达式,第二个参数填写待匹配的文本 根据正则筛选符合条件的数据形成一个列表 如果没有找到则返回一个空列表
res = re.findall('a', s)
print(res)  # ['a', 'a', 'a']
res1 = re.findall('f', s)
print(res1)  # []

# search()函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
res2 = re.search('a', s)
print(res2)  # <_sre.SRE_Match object; span=(0, 1), match='a'>  返回一个结果对象
print(res2.group())  # a 使用group可以取出结果
res3 = re.search('f', s)
print(res3)  # None
print(res3.group())  # 报错

# match()函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None
res4 = re.match('a',s)
print(res4)  # 返回一个结果对象
print(res4.group())  # a
res5 = re.match('b',s)
print(res5)  # 返回一个None
print(res5.group())  # 报错

    其他方法

import re

s = 'abacbacbd'
res = re.split('[ab]', s, 2)  # 先按 'a'切割得到'','bacbacbd' 再按'b'切割得到'','','acbacbd',2是切割次数,不填默认按照条件切完
print(res)  # ['', '', 'acbacbd']
s1 = 'aba564cbacbd'

res1 = re.sub('\d', 'H', s1, 1)  # 按照正则将s1中数字替换成H 也可以在最后面添加可以替换的次数 不填默认全换
print(res1)  # abaH64cbacbd

res2 = re.subn('\d','H',s1)  #按照正则将s1中数字替换成H 也可以在最后面添加可以替换的次数 不填默认全换
print(res2)  # ('abaHHHcbacbd', 3) 以元组的形式返回一个结果,后面的是替换的次数

    常用方法

import re

regexp_obj = re.compile('\d+')  # 将正则表达式编译成正则表达式对象 方便重复使用该正则
res = regexp_obj.search('absd213j1hjj213jk')
res1 = regexp_obj.match('123hhkj2h1j3123')
res2 = regexp_obj.findall('1213k1j2jhj21j3123hh')
print(res, res1, res2)  # <_sre.SRE_Match object; span=(4, 7), match='213'> <_sre.SRE_Match object; span=(0, 3), match='123'> ['1213', '1', '2', '21', '3123']


res = re.finditer('\d+','ashdklah21h23kj12jk3klj112312121kl131')  # 将满足正则条件的放入迭代器中
print([i.group() for i in res])  # ['21', '23', '12', '3', '112312121', '131']

    分组优先机制

import re
res = re.search('^[1-9](\d{14})(\d{2}[0-9x])?$','110105199812067023')
print(res)
print(res.group())  # 110105199812067023
print(res.group(1))  # 10105199812067
print(res.group(2))  # 023
print(res.group(3))  # 报错
# group()里面填数字就是拿括号括起来的值,从左到右,没有了还拿就会报错 


# 无名分组
# findall针对分组优先展示   
res = re.findall("^[1-9]\d{14}(\d{2}[0-9x])?$",'110105199812067023')
print(res) # ['023']
# 取消分组优先展示 在分组里面填写一个?:来路取消分组
res1 = re.findall("^[1-9](?:\d{14})(?:\d{2}[0-9x])?$",'110105199812067023')
print(res1) # ['110105199812067023']
# 有名分组
# 可以在分组里面填写?P<名字>来给分组起名
res = re.search("^[1-9](?P<H>\d{14})(?P<J>\d{2}[0-9x])?$",'110105199812067023')
print(res.group(1)) # 按照索引取值 10105199812067
print(res.group('H')) # 按照名字取值 10105199812067
print(res.group('J')) # # 按照名字取值 023

  

二、collections模块

    该模块内部提供了一些高阶数据类型

    具名元组(namedtuple)

        具名元组(namedtuple) 是 python 标准库 collections 中的工厂函数。

        它接受两个参数,第一个参数表示类的名称,第二个参数是类的字段名。

        后者可以是可迭代对象,

        也可以是空格隔开的字符串。然后,我们通过一串参数的形式将参数传递到构造函数中。这样,我们既可以通过字段名访问元素,也可以用索引访问元素。

from collections import namedtuple

point = namedtuple('坐标', 'x y')
res = point(1, 2)
print(res)
print(res.x)
print(res.y)

 

 

     双端队列(deque)

    # 队列模块
    import queue  # 内置队列模块:FIFO
    # 初始化队列
    # q = queue.Queue()
    # 往队列中添加元素
    # q.put('first')
    # q.put('second')
    # q.put('third')
    # 从队列中获取元素
    # print(q.get())
    # print(q.get())
    # print(q.get())
    # print(q.get())  # 值去没了就会原地等待
   
  # 双端队列模块 from collections import deque q = deque([11,22,33]) q.append(44) # 从右边添加 q.appendleft(55) # 从左边添加 print(q.pop()) # 从右边取值 print(q.popleft()) # 从做边取值

    有序字典(OrderedDict)      

      字典本身是无序的,使用OrderedDict可以使字典变成有序的

from collections import OrderedDict

or_dict = OrderedDict([('name','mike'), ('age',18), ('hobby','read')])
print(or_dict)

 

 

 

    默认字典(defaultdict)

    默认字典的构造函数接受一个工厂函数default_factory作为参数,可以将一个类型名看做是一个工厂函数,比如listtuplestr等。

 

from collections import defaultdict
    values = [11, 22, 33,44,55,66,77,88,99,90]
    my_dict = defaultdict(list)
    for value in  values:
        if value>60:
            my_dict['k1'].append(value)
        else:
            my_dict['k2'].append(value)
    print(my_dict)

  

    计数器(Counter)

      Counter可以计数字符出现的次数,然后将字符和出现的次数的数据存入字典中

from collections import Counter
s = 'alkdsjklajdslkajdkljzxklcj'
res = Counter(s)
print(res)  # Counter({'l': 5, 'k': 5, 'j': 5, 'a': 3, 'd': 3, 's': 2, 'z': 1, 'x': 1, 'c': 1})

 

 

 

 

三、time模块

    时间的三种表现模式:

      1.时间戳

      2.结构化时间(一般是给计算机看的)

 

 

 

 

      3.格式化时间(一般是给给人看)

       %y 两位数的年份表示(00-99)      

      %Y 四位数的年份表示(000-9999)
      %m 月份(01-12)
      %d 月内中的一天(0-31)
      %H 24小时制小时数(0-23)
      %I 12小时制小时数(01-12)
      %M 分钟数(00=59)
      %S 秒(00-59)
      %a 本地简化星期名称
      %A 本地完整星期名称
      %b 本地简化的月份名称
      %B 本地完整的月份名称
      %c 本地相应的日期表示和时间表示
      %j 年内的一天(001-366)
      %p 本地A.M.或P.M.的等价符
      %U 一年中的星期数(00-53)星期天为星期的开始
      %w 星期(0-6),星期天为星期的开始
      %W 一年中的星期数(00-53)星期一为星期的开始
      %x 本地相应的日期表示
      %X 本地相应的时间表示
      %Z 当前时区的名称
      %% %号本身

    格式转换

 

 

 

  

import time

time.sleep(5)  # 阻塞括号中的秒数
print(time.time())  # 时间戳
print(time.localtime()) # 结构化当地的时间
print(time.gmtime())  # 结构化uc时间
print(time.strftime('%Y-%m-%d-%H-%M-%S'))  # 格式化时间

 四、datetime模块

import datetime

res = datetime.date.today()  # 年月日 2021-11-25
print(res)  #2021-11-25
print(res.year)  #2021
print(res.month)  #11
print(res.day)  #25
res1 = datetime.datetime.today()  # 年月日时分秒 2021-11-25 19:08:59.779221
print(res1)  #2021-11-25 19:13:29.968774
print(res1.year)  #2021
print(res1.month)  #11
print(res1.day)  #25
print(res1.hour)  #19
print(res1.minute)  #13
print(res1.second)  #29
print(res.weekday())  #3  获取星期(weekday星期是0-6) 0表示周一
print(res.isoweekday())  #4  获取星期(weekday星期是1-7) 1表示周一

      时间差(timedelta)

import datetime
now_time = datetime.datetime.today() tel_time = datetime.timedelta(5) print(now_time-tel_time) # 五天前的日期 2021-11-20 19:22:04.084645 print(now_time+tel_time) # 五天后的日期 2021-11-30 19:22:04.084645 """ 日期对象 = 日期对象 +/- timedelta对象 timedelta对象 = 日期对象 +/- 日期对象 """

  

 

posted @ 2021-11-25 19:53  椰子皮0oo0  阅读(61)  评论(0)    收藏  举报
1