re模块补充与其他模块介绍


注:昨日写了re单个模块几个重要的点需要补充

一.re模块补充

1.findall独有的优先级别展示
res = re.findall('abc', 'abcabcabcabc')
    print(res) # ['abc','abc','abc','abc']
# 正则表达式
2.res = re.findall('a(b)c', 'abcabcabcabc')
    print(res)  # ['b', 'b', 'b', 'b']
# 正则表达式优先分组()
3.res = re.findall('a(f:b)c', 'abcabcabcabc')
    print(res) # ['abc','abc','abc','abc']
# 正则表达式取消优先展示(f:)
4res = re.findall('(a)(b)(c)', 'abcabcabcabc')
    print(res) # [('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c')]
# 正则表达式三个值都优先后会出现列表套元组
"""不能通过findall.来进行group取值"""

1.可以通过group取值

1.res = re.search('(a)(b)(c)', 'abcabcabcabc')
2.res = re.match('(a)(b)(c)', 'abcabcabcabc')
match search
 print(res.group(0)) #abc
 print(res.group(1)) #a
 print(res.group(2)) #b
 print(res.group(3)) #c
 """有几个值可以取几个值"""
还可以通过改名字来进行引用取值
1.res = re.search('(a)(?P<name>b)(c)', 'abcabcabcabc')
 print(res.group('name'))  #b

二.(collections)模块

在原来dict list tuple set  增加更多的数据类型
1.具名元组(有名字的元组):namedtuple
2.双端对列(多进多出):queue
3.有序字典(原来的字典是无序的):OrderedDict
4.计数器(继承了字典):Counter

1.具名元组

通过:from collections import namedtuple # 指名道姓
ser = namedtuple('名字',['x','y'])
point = ser(1, 2)  结果:#名字 (x=1, y=2)
print(point.x)     结果:#1

2.双端队列

import queue         # 队列
q = queue.Queue(3)   # 输入的值对应就是进去的值和输出的值
q.put(123)
q.put(321)           # put 存放
q.put(555)
print(q.get())       # 获取 
print(q.get())
print(q.get())
# 结果 123,321, 555 (先进先出)
------------------------
from collections import deque
q = deque([1,2,3,4])
print(q)
# 结果 ([1,2,3,4])
q.append(444)        # 尾部添加
q.appendleft(555)    # 头部添加
print(q)
# 结果 ([555,1,2,3,4,444])
q.pop()              # 尾部弹出
q.popleft()          # 头部弹出
print(q)
# 结果 ([1,2,3,4])

3.有序字典

1.字典是无序的 K:V
2.有序字典
from collections import OrderedDict
ser = OrderedDict([(1,2), (3,4), (5,6)])
ser['x'] = 222  # 添加新的键值对
ser['c'] = 111  # 添加新的键值对
# 结果([(1,2), (3,4), (5,6),(x,222),(c,111)])
OrderedDict会记住字典的排列顺序 
不会改变顺序 如果添加的话也是按照顺序来添加的
2.默认字典
from collections import defaultdict 
defaultdict 默认所有的值为列表(list)

3.1小例题

有如下值集合 [11,22,33,44,55,67,77,88,99,999],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
1.正常
l1 = [11,22,33,44,55,67,77,88,99,999]
new_dict = {'k1':[],'k2':[]}
for i in l1:
    if i > 66:
        new_dict['k1'].append(i)
    else:
        new_dict['k2'].append(i)
print(new_dict)
2.调用defaultdict默认字典
values = [11, 22, 33,44,55,67,77,88,99,90]
my_dict = defaultdict(list)  
for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

4.计数器

1.正常调用
res = 'abcdeabcdabcaba'
"""统计字符串中所有字符出现的次数"""
new_dict = {}
for i in res:
    if i not in new_dict:
        # 字符第一次出现 应该创建一个新的键值对
        new_dict[i] = 1
    else:
        new_dict[i] += 1
print(new_dict)
# 结果{'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
2.调用模块Counter
from collections import Counter
r = Counter(res)
print(r)
# 结果{'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
还可以单个取值
print(r.get('a'))  # 当字典使用

三.时间模块time

1.时间模块常用方法
time.sleep(sece)推迟运行时间,单位是秒
time.time() 时间戳
2.表示时间各种的三种用法(可以彼此转换)
1.时间戳
time.time
距离1970年1月1日0时0分0秒至此相差的秒数  
2.结构化时间
该时间类型主要是给计算机看的,人看起来不太方便
time.localtime()
0       tm_year(年)	比如2011
1	tm_mon(月)	1 - 12
2	tm_mday(日)	1 - 31
3	tm_hour(时)	0 - 23
4	tm_min(分)	0 - 59
5	tm_sec(秒)	0 - 60
6	tm_wday(weekday)	0 - 6(0表示周一)
7	tm_yday(一年中的第几天)	1 - 366
8	tm_isdst(是否是夏令时)	默认为0
3.格式化时间
人最容易接受的时间格式 
time.strftime()
'%Y-%m-%d %H:%M:%S'
'%Y-%m-%d %X'
2022/3/29/ 20:21:50

3.1更多的格式化时间

          %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 当前时区的名称
          %% %号本身

3.2时间类型转换

格式化时间<==> 结构化时间<==>时间戳

四.模块datetime

import datetime
print(datetime.date.today())  # 2022-03-29
# 今日时间
print(datetime.datetime.today()) # 2022-03-29 20:46:33.665519
1.date:年月日
2.datetime: 年月日 时分秒

4.1时间差

import datetime
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(days=1)  # days 天数
print(ctime)  # 本地时间
print(ctime + time_tel)  # 一天以后
print(ctime - time_tel)  # 一天以前
结果分别为:
2022-03-29 20:49:29.333389
2022-03-30 20:49:29.333389
2022-03-28 20:49:29.333389
"""
针对时间计算的公式
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
"""

五.随机模块random

import random
1.random.random())      # 随机产生一个0到1之间的小数
2.random.uniform(2,4))  # 随机产生一个2到4之间的小数
3.random.randint(0,9))  # 随机产生一个0到9之间的整数(包含0和9)
4.random.shuffle        # 随机打乱一个数据集合
5.random.choice         # 随机在(数据集合)中抽取一个
6.random.sample(%s,2) # 随机指定个数抽取

posted @ 2022-03-29 21:03  笑舞狂歌  阅读(49)  评论(0编辑  收藏  举报