re模块补充、collections、time与datetime、random

一、re模块的其他知识

二、collections模块

三、time与datetime模块

四、random模块

一、re模块补充说明

import re
ret = re.findall('(a)bc', 'abcabcabcabc')
print(ret)
ret = re.findall('a(?:b)c', 'abcabcabcabc')
print(ret)
ret = re.findall('(a)(b)(c)', 'abcabcabc')
print(ret)
ret = re.findall('(?P<aaa>a)(b)(c)', 'abcabcabc')
print(ret)

q6ihNV.jpg

""" 
  findall默认的是分组优先展示,所以如果正则表达式有括号分组,在展示结果的时候,默认只演示括号内正则表达式匹配到的内容。
  所以我们也可以取消分组有限展示的极致
   (?:)  括号前面加问号冒号
"""
import re
ret = re.search('(a)b(c)','abcabcabcabc')
print(ret.group())
print(ret.group(0))  # 通过索引的方式单独获取分组内匹配到的数据
print(ret.group(1))
print(ret.group(2))
''' 
   search和match里面有几个分组,group方法括号内最大就能写到几
'''

q6mrOU.jpg

# 分组也可以给组起别名
import re
ret = re.search('a(?P<name1>b)(?P<name2>c)', 'abcabcabcabc')
print(ret.group('name1'))  # b
print(ret.group('name2'))  # c
# 通过名字对应来取值

二、collections模块

1、具名元组namedtuple

from collections import namedtuple  # 使用from...import..的方式直接调用模块里面的功能
# 1、建立一个元组对象模板
point = namedtuple('坐标',['x','y'])
# 2、创建诸多元组数据
p1 = point(1, 2)
p2 = point(3, 4)
print((p1, p2))
person = namedtuple('嘉宾','name age number')
person1 = person('熊大',10,1)
person2 = person('熊二',9,2)
print(person1, person2)
# 直接获取person1中的年龄
print(person1.age)

q6QGIe.jpg

# 根据具名元组的这个特性,它的使用也相对广泛,例如在数学领域和娱乐领域等
# 获取扑克的点数
from collections import namedtuple
card = namedtuple('扑克牌',['花色', '点数'])
c1 = card('黑桃♠', '3')
c2 = card('梅花♣', '2')
c3 = card('方块◇', 'k')
print(c1, c2, c3)
# 直接查看点数
print(c2.点数)

q61wE8.jpg

2、双端队列deque

队列:先进先出, 默认是只有一端进,一端出
双端队列:两端都可以进出
import queue
q = queue.Queue(3)  # 最多只能放三个元素
import queue
q = queue.Queue(3)
q.put(111)
q.put(222)
q.put(333)
print(q.get())  # 111
print(q.get())  # 222
print(q.get())  # 333
#  如果队列增加满了,继续增加程序就会原地等待

q6UrX4.jpg

from collections import deque
q = deque([11, 22, 33])
print(q)
q.append(44)  # 从后面增加,也就是从右边增加
print(q)
q.appendleft(123)  # 从左边增加
print(q)
q.pop()
print(q)  # 从后面弹出,也就是右边
q.popleft()  # 从左边弹出
print(q)

q6d8ds.jpg

3 、字典相关

# 字典的内部是无序的
d1 = dict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
print(d1)  # {'pwd': 123, 'name': 'jason', 'hobby': 'study'}

# 有序字典
from collections import OrderedDict
d1 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(d1)
d1['x'] = 111
d1['y'] = 222
d1['z'] = 333
print(d1)

q669Df.jpg

小练习:
"""
有如下值集合 [11,22,33,44,55,67,77,88,99,999],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
"""
# 使用for循环来写
l1 = [11,22,33,44,55,67,77,88,99,999]
new_d = {'k1':[], 'k2':[]}  # 大于66存k1,否则存k2
for i in l1:
    if i > 66:
        new_d['k1'].append(i)
    else:
        new_d['k2'].append(i)
print(new_d)
# {'k1': [67, 77, 88, 99, 999], 'k2': [11, 22, 33, 44, 55]}


# 使用defaultdict
from collections import 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)
print(my_dict)

q66IiQ.jpg

4 、计数器 Counter

# 统计字符串里面字符出现的次数
res = 'ababbbababcab'
# 使用for循环
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': 7, 'c': 1}


# 使用counter
from collections import Counter
n = Counter(res)
print(n)  # Counter({'b': 7, 'a': 5, 'c': 1})
print(r.get('a'))  # 5
# 可以根据按key取值

三、time与datetime模块

1、time模块

# 常用模块
1、time.sleep(secs)  # secs就是推迟的秒数
  推迟指定时间运行,单位为秒
2、time.time
获取当前时间戳


# 三种用于表示时间的格式(彼此之间可以转换)
  1、时间戳
    距离1970年0时0分0秒带现在的秒数
    time.time()
  2、结构化时间
    这个时间类型主要是给计算机看的
    time.localtime()

q62sG4.jpg

3、格式化时间
时间格式  2000/1/21 11:11:11
time.strftime()
'%Y-%m-%d %H:%M:%S' # 2022-03-29 19:04:35
'%Y-%m-%d %X'  # 2022-03-29 19:05:05

q6R8w6.jpg

2、时间类型的转换

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

# 时间戳<-->结构化时间
	gmtime
  localtime
# 结构化时间<-->格式化时间
	strftime
	strptime
  	time.strptime("2017-03-16","%Y-%m-%d")
    time.strptime("2017/03","%Y/%m")  前后必须一致
ps:UTC时间比我们所在的区域时间早八个小时(时区划分)

q64F9U.jpg

3、datetime模块

# 调用模块
import datetime
print(datetime.date.today())  # 2022-03-29
print(datetime.datetime.today())  # 2022-03-29 19:18:33.156460
"""  
date   获取的是年月日
datetime  获取的是年月日时分秒
"""
res = datetime.date.today()
print(res.year)  # 2022
print(res.month)  # 3
print(res.day)  # 29
print(res.weekday())  # 1      星期0-6
print(res.isoweekday())  # 2    星期1-7
"""
针对时间计算的公式
    日期对象 = 日期对象 +/- timedelta对象
    timedelta对象 = 日期对象 +/- 日期对象
"""
res = ctime + time_tel
print(res - ctime) 
# 4 days, 0:00:00

四、random模块

'''随机数模块'''
import random
print(random.random())  #  随机产生一个0到1之间的小数
print(random.uniform(2,4))  # 随机产生一个2到4之间的小数
print(random.randint(0,9))  # 随机产生一个0到9之间的整数(包含0和9)
print(random.randint(1,6))  #     掷骰子
 l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
 random.shuffle(l)  # 随机打乱一个数据集合
 print(l)
 l1 = ['特等奖','一等奖','二等奖','三等奖','优秀奖']
 print(random.choice(l1))  # 随机抽取一个 抽奖
print(random.sample(ll, 2))  # 随机指定个数抽样 

q6x5ut.jpg

posted @ 2022-03-29 20:48  未月  阅读(49)  评论(0)    收藏  举报