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模块

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模块

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)

今日小结

随机模块真有意思!

posted @ 2022-03-29 21:58  Eason辰  阅读(109)  评论(0)    收藏  举报