re模块、collections模块、time模块、datetime模块

正则表达式之re模块

re.findall用法(重要)

re.findall( '正则表达式' , '待匹配的字符' )

找出所有的目标字符,用列表的形式展现,如果找不到返回空列表.

import re

 re.findall('正则表达式','带匹配的文本')  # 根据正则匹配除所有符合条件的数据
 res = re.findall('a','eva jason jackson')
 print(res)  # ['a', 'a', 'a']  结果是一个列表(要么有元素 要么空列表)

re.search用法(重要)

re.search( '正则表达式' , '待匹配的字符' )

寻找第一个,找到后就停止, 找不到就返回None

用group ( ) 来查看 没有值就报错

res = re.search('正则表达式','带匹配的文本')  # 根据正则匹配到一个符合条件的就结束
res = re.search('a','eva jason jackson')
print(res)  # 结果对象
print(res.group())  # a
if res:
     print(res.group())
 else:
     print('不好意思 没有找到')
"""如果没有符合条件的数据 那么search返回None 并且使用group会直接报错"""

re.math用法(重要)

只找开头的,如果开头不是,就返回None

用group ( ) 来查看, 没有值就报错

res = re.match('a','abac')  # 根据正则从头开始匹配(文本内容必须在开头匹配上)
print(res)  # 结果对象
print(res.group())  # a

re.compile用法(重要)

instead = re.compile('.*n\d')
res = instead.findall('eva3jason4yuan4')
print(res)  # ['eva3jason4yuan4']

image

re.finditer用法(重要)

res = re.finditer('\d+', 'ashdklah21h23kj12jk3klj112312121kl131')
print([i.group() for i in res])  # ['21', '23', '12', '3', '112312121', '131']

image

无名分组与有名分组(重要)

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

# 有名分组
res = re.search('^[1-9](?P<xxx>\d{14})(?P<ooo>\d{2}[0-9x])?$','110105199812067023')
print(res)
print(res.group())  # 110105199812067023
print(res.group(1))  # 10105199812067  无名分组的取值方式(索引取)
print(res.group('xxx'))  # 10105199812067
print(res.group('ooo'))  # 023

image

image

re模块其他方法

import re
# 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
 res = re.split('[ab]','abcd')
 print(res)  # ['', '', 'cd']

# 类似于字符串类型的replace方法
 res = re.sub('\d','H','eva3jason4yuan4',1)  # 替换正则匹配到的内容
 res = re.sub('\d','H','eva3jason4yuan4')  # 不写默认替换所有
 print(res)  # evaHjason4yuan4

"""返回元组 并提示替换了几处"""
 res = re.subn('\d','H','eva3jason4yuan4',1)
 print(res)  # ('evaHjason4yuan4', 1)
 res = re.subn('\d','H','eva3jason4yuan4')
 print(res)  # ('evaHjasonHyuanH', 3)

collections模块

1.namedtuple(具名元组)

    from collections import namedtuple

    """
    namedtuple('名称',[名字1,名字2,...])
    namedtuple('名称','名字1 名字2 ...')
    """
    point = namedtuple('坐标', ['x', 'y'])
    res = point(11, 22)
    print(res)  # 坐标(x=11, y=22)
    print(res.x)  # 11
    print(res.y)  # 22
    point = namedtuple('坐标', 'x y z')
    res = point(11, 22, 33)
    print(res)  # 坐标(x=11, y=22, z=33)
    print(res.x)  # 11
    print(res.y)  # 22
    print(res.z)  # 33

image

2.队列

    # 队列模块
    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())  # 值去没了就会原地等待

3.双端队列

    from collections import deque
    q = deque([11,22,33])
    q.append(44)  # 从右边添加
    q.appendleft(55)  # 从左边添加
    print(q.pop())  # 从右边取值
    print(q.popleft())  # 从做边取值

image

4.有序字典

    normal_dict = dict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
    print(normal_dict)
    {'hobby': 'study', 'pwd': 123, 'name': 'jason'}
    from collections import OrderedDict
    order_dict = OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
    print(order_dict)
    OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
    order_dict['xxx'] = 111
    order_dict
    OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study'), ('xxx', 111)])
    normal_dict['yyy'] = 222
    normal_dict
    {'hobby': 'study', 'pwd': 123, 'yyy': 222, 'name': 'jason'}

5.默认值字典

	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)

6.计数器

image

time模块

时间三种表现形式

1.时间戳(秒数)
2.结构化时间(一般是给机器看的)
3.格式化时间(一般是给人看的)
三种时间是可以相互转换的!!!

1.time.sleep()  # 原地阻塞指定的秒数
2.time.time()  # 获取时间戳时间

1.格式化时间

 print(time.strftime('%Y-%m-%d'))  # 2021-11-25
 print(time.strftime('%Y-%m-%d %H:%M:%S'))  # 2021-11-25 11:48:34
 print(time.strftime('%Y-%m-%d %X'))  # 2021-11-25 11:48:34

image

更多的时间符号

image

2.结构化时间

image

datetime模块

import datetime
 print(datetime.date.today())  # 2021-11-25 没有具体时间
 print(datetime.datetime.today())  # 2021-11-25 12:15:11.969769
"""date年月日  datetime年月日时分秒  time时分秒(MySQL django后期可以)"""
 res = datetime.datetime.today()
 print(res.year)  # 2021
 print(res.month)  # 11
 print(res.day)  # 25
 print(res.weekday())  # 获取星期(weekday星期是0-6) 0表示周一
 print(res.isoweekday())  # 获取星期(weekday星期是1-7) 1表示周一
"""时间差(timedelta)"""
 ctime = datetime.datetime.today()
 time_tel = datetime.timedelta(days=3)
 print(ctime)  # 2021-11-25 12:20:48.570489
 print(ctime - time_tel)  # 2021-11-22 12:21:06.712396
 print(ctime + time_tel)  # 2021-11-28 12:21:06.712396
"""
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
"""
 ret = ctime + time_tel
 print(ret - ctime)  # 3 days, 0:00:00
 print(ctime - ret)  # -3 days, 0:00:00

image

posted @ 2021-11-25 19:51  zong涵  阅读(13)  评论(0编辑  收藏  举报