一、RE模块
1.RE模块介绍
正则表达式(Regluar Expressions)简称规则表达式,在Python中想要用正则就需要借助re模块
主要作用于 创建一个“规则表达式“用于验证和查找符合规则的文本
广泛用于各种搜索引擎,账号密码的验证等
2.RE内置函数
函数 | 作用说明 |
---|---|
re.findall ( ) | 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到则返回空列表 |
re.finditer ( ) | 在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回 |
re.match ( ) | 从字符串的起始位置匹配,匹配成功,返回一个匹配的对象,否则返回None |
re.search ( ) | 扫描整个字符串并返回第一个成功的匹配 |
re.complie ( ) | 将正则表达式传入,返回一个匹配对象,一般与其他方法组合使用 |
re.split ( ) | 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型 |
re.sub ( ) | 把字符串中所有匹配正则表达式的地方替换成新的字符串 |
( ) | 分组findall针对分组的正则表达式匹配到的结果 优先展示 |
?P < > | 别名 可以通过别名索引到相对应的数据值 |
import re
1.匹配所有
ret = re.findall('正则', '待匹配内容') # 返回所有满足匹配条件的结果,放在列表里
'''待匹配的内容一定是一个字符串、文本、[]'''
res = re.findall('a','apple everyday amy')
print(res) # ['a', 'a', 'a'] 查找所有符合正则表达式要求的数据 ,结果放在列表例
res = re.findall('a','pple everydy my')
print(res) # [] 如果匹配到内容就把数据以列表的形式返回,如果匹配不到则返回[]空列表
2.匹配所有返回迭代器
res = re.finditer('a','apple everyday amy')
print(res) # <callable_iterator object at 0x000001B8A88DC1C0>
'''查找所有符合正则表达式要求的数据 结果返回迭代器对象'''
3.搜索第一个
res = re.search('a','apple everyday amy')
print(res) # <re.Match object; span=(0, 1), match='a'>
'''通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None'''
print(res.group()) # 匹配到第一个符合条件的数据就立马结束
4.只匹配开头
res =re.match('a','apple everyday amy')
print(res) # <re.Match object; span=(0, 1), match='a'>
res = re.match('a','pple everyday amy')
print(res) # None 在开头没有匹配到相对应的字符串 就直接返回None 后面不会继续看
print(res.group()) # 在开头没有匹配到,使用group直接报错
'''如果不想报错,可以用异常捕获来解决'''
try:
res = re.match('a','pple everyday amy').group()
print(res)
except Exception:
print(res)
5.正则模版
obj = re.compile('\d{3}') # 当某个正则表达式需要频繁使用的时候,我们可以把它做成模版
res1 = obj.findall('123165465465132')
res2 = obj.findall('kfjdslkajfkljdsalfj')
print(res1,res2) # ['123', '165', '465', '465', '132'] []
6.其他方法
res = re.split('[ab]','abcde') # 先按'a'分割得到''和'bcde',在对''和'bcde'按'b'分割
print(res) # ['', '', 'cde']
res = re.sub('\d','H','jdkfj7lajkskl',1) # 将数字替换成'H',参数1表示只替换1个
print(res) # jdkfjHlajkskl
res = re.subn('\d','H','jkfjdl5ksajlfks7')
# 将数字替换成'H',并且返回成元组形式(’替换的结果','替换了多少个')
print(res)
3.分组
import re
'''无名分组'''
res = re.findall('a(b)c','abcabcabcabc')
print(res) # 分组匹配到的结果优先展示
'''取消分组展示,在括号里面数据的前面添加?:b'''
res = re.findall('a(?:b)c','abcabcabcabc')
print(res)
# 无名分组。使用小括号括起来的正则表达式就是无名分组
res = re.search('^[1-9](\d{14})(\d{2}[0-9x])?$','110105199812067023')
print(res)
print(res.group())
print(res.group(1))
print(res.group(2))
'''findall针对分组优先展示 无名分组'''
ret = re.findall('^[1-9](\d{14})(\d{2}[0-9x])?$','110105199812067023')
print(ret)
'''有名分组'''
'''有名分组就是使用小括号括起来的正则表达式然后给起个名字就是有名'''
res = re.search('^[1-9](?P<xxx>\d{14})(?P<ooo>\d{2}[0-9x])?$','110105199812067023')
print(res)
print(res.group(1))
print(res.group(2))
print(res.group('xxx'))
print(res.group('ooo'))
二、time模块
三种时间表现方式
1.时间戳
秒数
2.结构化时间
主要是给计算机看的,人看不适应
3.格式化时间
主要是给人看的
Y m d H M S X
年 月 日 时 分 秒 时:分:秒
1.时间戳>.time.time()
import time
print(time.time())
#时间戳,这个时间是以1970年1月1日0时0分0秒开始计算的
2.结构化时间>.time.gmtime()
import time
print(tiem.gmtime()) #UTC时间,与英国伦敦当地时间一致
print(time.localtime()) #当地时间。
#结构化时间:localtime将一个时间戳转换成当前时区的struct_time
3.格式化时间>.tiem.strftime()
print(time.strftime('%Y-%m-%d')) # 2023-09-20
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2023-09-20 19:41:46
print(time.strftime('%Y-%m-%d %X')) # 2023-09-20 19:41:46
#格式化时间参考的中国时间
Python中的时间日期格式化符号
%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 当前时区的名称
%% %号本身
索引(index) | 属性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 如:2023 |
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 |
小结
时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的
三、Datetime模块
Datetime 可以获取 当前时间、年、月、日、时、分、秒、微秒、星期几、UTC时间、时间拼接
Datetime 中的weekday()函数用于获取周数 它将返回 0-6范围内的数字
datetime基本格式
import datetime 导入模块
now = datetime.datetime.today() 获取当前时间赋值给now
print(now) 获取当前今日北京时间
print(now.year) 获取当年时间
print(now.month) 获取当月时间
print(now.weekday()) 获取今年星期几
print(now.isoweekday()) 获取今天星期几
print(now.microsecond) 当前是多少微秒
print(datetime.datetime.utcnow()) 获取当前格林威治时间UTC
datetime.date.today() # 年月日
datetime.datetime.today() # 年月日 时分秒
datetime.datetime.now() # 年月日 时分秒
datetime时间拼接
import datetime
res = datetime.datetime.today()
how = datetime.timedalta(days=3,hours=3,minutes=20,seconds=12,milliseconds=11,microseconds=2)
print(res + how)
print(res - how)
索引 | 天 |
---|---|
0 | Monday |
2 | Tuesday |
3 | Wednesday |
4 | Thursday |
5 | Friday |
6 | Saturday |
7 | Sunday |
四、random模块(随机数)
random.random() | 随机生成一个0到1之间的小数 |
random.uniform(n,m) | 随机生成一个大于n小于m的小数 |
random.randint(n,m) | 随机生成一个n到m之间的整数 |
random.randrange(n,m,2) | 随机生成一个n到m之间的基数 |
random.randint(n,m) | 随机生成一个n到m之间的整数 |
random.choice([‘1’,‘2’,‘3’]) | 随机抽取中括号中列表里面的一个数据值 |
random.sample([‘1’,‘2’,‘3’,‘5’],2) | 随机抽取中括号中列表里面的数据值(抽取数据值的个数由后面的数字来决定) |
random.shuffle(变量名) | 将列表中的数据集全部打乱,洗牌发牌 |
import random # 导入随机数模块
'''随机小数random(),uniform()'''
print(random.random()) # 随机生成一个0到1之间的小数
print(random.uniform(1,6)) # 随机生成一个大于1小于6的小数
'''随机整数randint(),randrange()'''
print(random.randint(1,10)) # 随机生成一个1-10之间的整数
print(random.randrange(1,10,2)) # 随机生成一个1-10之间的基数
'''随机抽一个或多个样本 choice choices sample'''
print(random.choice(['特等奖','一等奖','二等奖','三等奖','安慰奖'])) # 随机抽取一个样本
print(random.choices(['特等奖','一等奖','二等奖','三等奖','安慰奖'])) # 随机抽取一个样本 但是是以列表的形式输出
print(random.sample(['chen','jack','tom','ankn','jerry','kevin'],2)) # 随机抽取多个样本 以列表的形式输出
'''打乱列表顺序shuffle'''
ll = [2,3,4,5,66,77,88,43,11,'A','C','J','K','97']
random.shuffle(ll)
print(ll) # 随机打乱数据集[11, 88, 4, 2, 'K', 66, 43, 'J', 'C', 5, 3, '97', 'A', 77]
'''洗牌'''
item = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
random.shuffle(item)
print(item)
练习一下,做一个生成随机验证码,生成5位随机验证码,其中,包含数字、大写字母、小写字母的组合
'''
练习一下,做一个生成随机验证码,生成5位随机验证码,其中,包含数字、大写字母、小写字母的组合
'''
def get_code(n): # 形参传参
code = '' # 定义一个空字符串 需要拼接一下
for i in range(n):
'''随机生成一个0-9的数字'''
# 因为需要拼接所以需要转成str字符串形式
random_int = str(random.randint(0,9))
# print(random_int)
'''随机生成一个大写字母'''
random_upper = chr(random.randint(65,90)) # 转换成ASCII码
# print(random_upper)
'''随机生成一个小写字母'''
random_lower = chr(random.randint(97,122))
# print(random_lower)
'''随机生成一个数字或字母'''
code += random.choice([random_int,random_upper,random_lower])
return code
print(get_code(4))
print(get_code(5))