模块
目录
re模块补充说明
"""
findall默认是分组优先展示
正则表达式如果有括号分组那么在展示匹配结果的时候默认只演示括号内的正则表达式匹配到的内容
可以通过(?:)来取消分组展示机制
"""
# 分组优先展示
import re
res = re.findall('(a)bb','aaabbvcc')
print(res) #['a']
ret = re.findall('a(b)c', 'abcabcabcabc')
print(ret) # ['b', 'b', 'b', 'b']
ret = re.findall('(a)(b)c', 'abcabcabcabc')
print(ret) # [('a', 'b'), ('a', 'b'), ('a', 'b'), ('a', 'b')]
# 取消分组有限展示
res2 = re.findall('(?:a)bc','abcbcabc')
print(res2) # ['abc', 'abc']
# search中的分组展示
res = re.search('(a)bc','abcabcabc')
print(res.group()) # abc
print(res.group(0)) # abc
print(res.group(1)) # c
'''在search方法中可以通过索引的方式来单独获得分组数据的优先展示效果 索引0和没有索引一样不展示 索引1则是优先展示分组数据'''
# 分组后起别名
res = re.search('(?P<name>a)(?P<name2>b)c','abcabcabc')
print(res.group()) # abc
print(res.group(0)) # abc
print(res.group(1)) # a
print(res.group('name')) # a
print(res.group('name2')) # b
collection模块
具名元组
from collections import namedtuple
# 两种写法
t = namedtuple('坐标',['x','y'])
t2 = namedtuple('坐标','x,y')
# 使用
res = t(1,2)
print(res) # 坐标(x=1, y=2)
print(res.x) # 1
print(res.y) # 2
res2 = t2(2,3)
print(res2) # 坐标(x=2, y=3)
print(res2.x) # 2
print(res2.y) # 3
'''具名元组的使用场景非常的广泛 比如数字领域 娱乐领域等'''
card = namedtuple('扑克牌', ['花色', '点数'])
c1 = card('黑桃♠', 'A')
c2 = card('黑梅♣', 'K')
c3 = card('红心❤', 'A')
print(c1, c2, c3) #扑克牌(花色='黑桃♠', 点数='A') 扑克牌(花色='黑梅♣', 点数='K') 扑克牌(花色='红心❤', 点数='A')
print(c1.点数) # A
双端队列
# 队列:先进先出 默认是一端只能进,一端只能出
import queue
q = queue.Queue(3)
q.put(1)
q.put('a')
q.put(2)
# q.put(3) 由于队列已满,在继续添加元素,就会原地等待
print(q.get()) # 1
print(q.get()) # a
print(q.get()) # 2
print(q.get()) # 队列中没有数据,程序并不会结束而是原地等待
# 双端队列:两端都可以进出
from collections import deque
q = deque([1,2])
q.append(3) # 从右边添加元素
q.appendleft(4) # 从左边添加元素
print(q) # deque([4, 1, 2, 3])
q.pop()
print(q) # deque([4, 1, 2])
q.popleft()
print(q) # deque([1, 2])
collections中的字典
'''字典的内部是无序,collections模块中的OrderedDict方法确可以生成有序字典,或者将dict进类型转换成OrderedDict有序字典'''
# 字典的无序性
d1 = dict([('name','jason'),('pwd',123),('hobby','study')])
# print(d1) # {'pwd': 123, 'name': 'jason', 'hobby': 'study'}
# 有序字典
d2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(d2) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(d2['a']) # 1
'''
有如下值集合 [11,22,33,44,55,67,77,88,99,999],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
'''
# 常规方法是使用for循环对列表中的元素进行枚举然后跟66进行比较
l1 = [11,22,33,44,55,67,77,88,99,999]
dic = {'big':[],'small':[]}
for i in l1:
if i>66:
dic['big'].append(i)
else:
dic['small'].append(i)
print(dic)
# collections中的defaultdic方法能生成指定默认值的字典
from collections import defaultdict
l1 = [11, 22, 33, 44, 55, 67, 77, 88, 99, 999]
dic = defaultdict(list)
for i in l1:
if i > 66:
dic['big'].append(i)
else:
dic['small'].append(i)
print(dic) # defaultdict(<class 'list'>, {'small': [11, 22, 33, 44, 55], 'big': [67, 77, 88, 99, 999]})
print(dic['big']) # 67, 77, 88, 99, 999]
计数器
res = 'abcdeabcdabcaba'
# 常规方法仍然是枚举
res = 'abcdeabcdabcaba'
dic = {}
for i in res:
if i not in dic:
dic[i] = 1
else:
dic[i] += 1
print(dic) #{'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
# Counter方法进行计数
from collections import Counter
dic = Counter(res)
print(dic) # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
time模块
常用方法
time.sleep(5) # 推迟5s时间运行
time.time() # 获取当前时间戳
三种表示时间的格式
1.时间戳
距离1970年1月1日0时0分0秒至此相差的秒数
time.time()
2.结构化时间
该类型的时间主要是给计算机看到人看起来并不方便
time.localtime()
tm_year(年) | 比如2011 |
---|---|
tm_mon(月) | 1-12 |
tm_mday(日) | 1-31 |
tm_hour(时) | 0-23 |
tm_min(分) | 0-59 |
tm_sec(秒) | 0_59 |
tm_wday(周几) | 0-6(0表示周一,6表示周日) |
tm_yday(一年中的第几天) | 1-366 |
tm_isdst(是否为夏令时) | 默认为0 |
3.格式化时间
人最容易看懂和接收的一种时间格式 2011/11/11 11.11.11
time.strftime()
%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
# 结构化时间 <==> 格式化时间
strftime
strptime
time.strptime("2017-03-16","%Y-%m-%d") # 前后必须一致
datetime模块
# 基本操作
import datetime
print(datetime.datetime.today()) # 2022-03-29 19:52:17.352883
print(datetime.date.today()) # 2022-03-29
'''
date 意思时年月日
datetime 意思是年月日时分秒
'''
res = datetime.datetime.today()
print(res.day) # 29
print(res.hour) # 19
print(res.weekday()) # 1 星期0-6
print(res.isoweekday()) # 2 星期1-7
时间差
now = datetime.datetime.today()
tima_c = datetime.timedelta(days = 1)
print(now) # 2022-03-29 19:58:49.093466
delta = now -tima_c
print(delta) # 2022-03-28 19:58:49.093466
delta2 = now + tima_c
print(delta2) # 2022-03-30 19:58:49.093466
"""
针对时间计算的公式
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
"""
random模块
# 也叫做随机数模块
# random()
print(random.random()) # 随机产生一个0到1之间的小数
# uniform()
print(random.uniform(2,4)) # 随机产生一个2到4之间的小数
# randint()
print(random.randint(0,9)) # 随机产生一个0到9之间的整数(包含0和9)
# shuffle()
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
random.shuffle(l) # 随机打乱一个数据集合
>>>[5, 2, 8, 10, 12, 13, 4, 11, 9, 7, 1, 3, 6]
# choice()
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
print(random.choice(l)) # 随机抽取一个元素
>>>2
# sample()
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
print(random.sample(l,2)) # 随机抽取指定个数的元素
>>>[2,4]
练习
时间类型转换练习
import time
a = time.time()
# 时间戳转结构化时间
b = time.localtime(a)
# 结构化时间转字符串时间
c = time.strftime('%Y-%m-%d %H:%M:%S',b)
print(c)
# 字符串时间转结构化时间
d = time.strptime(c,'%Y-%m-%d %H:%M:%S')
print(d)
# 结构化时间转时间戳
e = time.mktime(d)
print(e)
时间差
'''
1.datetime.now() # 获取当前datetime
datetime.utcnow() # 获取当前格林威治时间
计算时间差
'''
import time
now1 = datetime.datetime.today()
now2 = datetime.datetime.utcnow()
delta = now1 - now2
print(delta)
>>>8:00:00.000001
用指定日期时间创建datetime
# 2.datetime(2017, 5, 23, 12, 20)
from datetime import datetime
i=datetime(2017,9,28,10,3,43)
print(i)
将以下字符串转换成datetime类型
'''
'2017/9/30'
'2017年9月30日星期六'
'2017年9月30日星期六8时42分24秒'
'9/30/2017'
'9/30/2017 8:42:50'
'''
from datetime import datetime
a = datetime.strptime('2017/9/30', '%Y/%m/%d')
print(a)
b = datetime.strptime('2017年9月30日星期六', '%Y年%m月%d日星期六')
print(b)
c = datetime.strptime('2017年9月30日星期六8时42分24秒', '%Y年%m月%d日星期六%H时%M分%S秒')
print(c)
d = datetime.strptime('9/30/2017','%m/%d/%Y')
print(d)
e = d.strptime('9/30/2017 8:42:50','%m/%d/%Y %H:%M:%S')
print(e)
验证码
import random
def func(d):
code = ''
l1 = []
for i in range(d):
a = chr(random.randint(65, 90))
b = chr(random.randint(97, 122))
c = random.randint(0, 9)
l2 = [a, b, c]
n = random.choice(l2)
code=''.join([code,str(n)])
return code
print(func(10))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人