python时间模块与随机值模块
python时间模块与随机值模块
昨日学习回顾

正则表达式
正则表达式是一门独立的知识,内容非常多,在多种编程语言中都实用。

取消转义
\斜杆可以取消特殊含义,在python中用r可以。
贪婪匹配:.* 获取最大可获取值
非贪婪匹配:.*? 获取零个或一个
正则表达式在python中,需要调用re模块
今日学习内容
re模块补充说明
在re模块中,re.findall
如果对需要的元素使用小括号括起来,那么他的同组元素就会优先匹配到一起,形成一个列表套元组的形式,未被小括号括起来的内容将不会显示,如果需要取消优先表示,(?:)需要这样使用小括号。
ret = re.findall('a(b)c', 'abcabcabcabc')
print(ret) # ['b', 'b', 'b', 'b']
ret = re.findall('a(?:b)c', 'abcabcabcabc')
print(ret) # ['abc', 'abc', 'abc', 'abc']
在re模块中,re.search可以利用索引取值的方法单独获取分组内匹配到的数据,并且分组后可以给分组起别名。
ret = re.search('a(b)c', 'abcabcabcabc')
print(ret.group()) # abc
print(ret.group(0)) # abc
print(ret.group(1)) # b
ret = re.search('a(?P<name1>b)(?P<name2>c)', 'abcabcabcabc')
print(ret.group('name1')) # b
print(ret.group('name2')) # c
collections模块
1.具名元组
from collections import namedtuple
1.创建一个元组对象模板。
point = tuple('数字组',['数字1','数字2'])
2.创建诸多元租数据
p1 = point(1,2)
p2 = point(3,4)
print(p1,p2) # 数字组(数字1=1,数字2=2) 数字组(数字1=3,数字2=4)
2.双端队列
队列:先进先出 默认是只有一端只能进另外一端只能出
双端队列:两端都可以进出
import queue
q = queue.Queue(3) # 最大只能放三个元素
存放元素
q.put(123)
q.put(321)
q.put(222)
q.put(444) # 如果队列满了 继续添加则原地等待
获取元素
print(q.get()) # 123
print(q.get()) # 321
print(q.get()) # 222
print(q.get()) # 如果队列空了 继续获取则原地等待
from collections import deque
q = deque([1,2,3])
print(q)
q.append(444) # 右边添加元素
print(q)
q.appendleft(666) # 左边添加元素
print(q)
q.pop() # 右边弹出元素
q.popleft() # 左边弹出元素
3.字典相关
正常字典内部是无序的
通过collections中的OrderedDict模块
有序字典
from collections import OrderedDict
d2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(d2)
d2['x'] = 1
d2['y'] = 2
d2['z'] = 3
print(d2)
print(d2.keys())
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
OrderedDict([('a', 1), ('b', 2), ('c', 3), ('x', 1), ('y', 2), ('z', 3)])
odict_keys(['a', 'b', 'c', 'x', 'y', 'z'])
字典生成式
from collections import defaultdict
values = [1, 2, 3, 4, 5 , 7, 8, 9]
my_dict = defaultdict(list) # 字典所有的值默认都是列表 {'':[],'':[]}
for value in values:
if value<6: # 设置条件
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
print(my_dict)
defaultdict(<class 'list'>, {'k1': [1, 2, 3, 4, 5], 'k2': [7, 8, 9]})
4.计数器
res = 'abcabcabcaabbcc'
from collections import Counter
r = Counter(res)
print(r) # 返回一个字典,每种值与值的数量形成一个键对值
print(r.get('b')) # 取出v值,获取值出现的数量

time模块
1.time.sleep(secs)
推迟指定的时间运行,单位为秒
ps:该方法贯穿前后(基础、后期)
2.time.time()
获取当前时间戳
该时间类型主要是给计算机看的,人看起来不太方便
| 结构化时间 | |
|---|---|
| tm_year | 年 |
| tm_mon | 月 |
| tm_hour | 日 |
| tm_min | 分 |
| tm_sec | 秒 |
| tm_wday(weekday) | 0表示周一 |
| tm_yday | 一年中的第几天 |
| tm_isdst | 是否夏令时(默认为0) |
人最容易接收的一种时间格式
| 格式化时间 | |
|---|---|
| %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 当前时区的名称
%% %号本身
时间类型的转换
格式化时间 <> 结构化时间 <> 时间戳
时间戳<-->结构化时间
gmtime localtime
结构化时间<-->格式化时间
time.strptime("2017-03-16","%Y-%m-%d")
time.strptime("2017/03","%Y/%m") 中间间隔的符号必须一致
ps:UTC时间比我所在的区域时间早八个小时(时区划分)
datetime模块
基本获取时间方式
import datetime
print(datetime.date.today())
# 2022-03-29 获取年月日
print(datetime.datetime.today())
# 2022-03-29 21:27:45.801529 获取精确到秒的时间
时间差
import datetime
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(minutes='分钟') # (days='天数') 设置一个时间
print(ctime)
print(ctime + time_tel) # 加上前面设置好的时间
print(ctime - time_tel) # 减去前面设置好的时间
针对时间计算的公式
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
res = ctime + time_tel
print(res - ctime) # 获取两个时间间隔的时间值

random模块
非常有趣的模块,随机数
import random
random.random() 随机产生一个0到1之间的小数
random.uniform(最小值,最大值) 随机产生一个范围内之间的小数
random.randint(最小值,最大值) 随机产生一个范围内之间的整数
random.shuffle(数据集合) 随机打乱数据集合
random.choice(数据集合) 随机从数据集合中选取一个
random.sample(数据集合, 抽取次数) 随机从数据集合中抽取默认个
作业
len_number = int(input('请输入您需要的验证码位数>>>:'))
number1 = []
str1 = []
mac = []
mac2 = ''
len1 = random.randint(0, len_number) # 数字长度随机从0到用户输入抽取一个
while len(number1) < len1: # 循环,直到数字列表中的元素等于随机出的数字
number1.append(str(random.randint(0, 9))) # 随机添加0-9中间的数字
len2 = len_number - len1 # 字母长度等于用户输入减去随机数
while len(str1) < len2: # 循环,直到字母列表中的元素等于用户输入长度减去随机数
number2 = random.randint(65,122) # 随机ASCII表对应数字
if not 90 < number2 < 97: # 在非字母对应中边不添加
str1.append(chr(number2)) # 添加大小字母到字母列表中
for i in number1:
mac.append(i)
for i1 in str1:
mac.append(i1)
mac1 = random.sample(mac, len_number) # 随机从数字与字母结合的列表中抽取用户输入的次数的验证码位数,彻底数字字母打乱顺序
for i2 in mac1:
mac2 = mac2 + i2 # 转换为字符串,并拼接
print(mac2)

今日小结
随机模块真有意思!

浙公网安备 33010602011771号