常用内置模块
常用内置模块
re模块补充
"""
findall默认是分组优先展示
正则表达式中如果有括号分组 那么在展示匹配结果的时候
默认只显示括号内正则表达式匹配到的内容!!!
也可以取消分组优先展示的机制
(?:) 括号前面加问号冒号
"""
# import re
# res = 'abcabcabcabcabcabcabc'
# ret = re.findall('(a)(b)c',res) # 使用括号可以将括号的内容分组进行展示
# print(ret)
# >>>[('a', 'b'), ('a', 'b'), ('a', 'b'), ('a', 'b'), ('a', 'b'), ('a', 'b'), ('a', 'b')]
# ret1 = re.findall('(?:a)(?:b)(c)',res) # 加了?:就不会优先展示了
# print(ret1)
# >>>['c', 'c', 'c', 'c', 'c', 'c', 'c']
# 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(b)(c)', 'abcabcabcabc')
# print(ret.group()) # abc
# print(ret.group(0)) # abc
# print(ret.group(1)) # b 可以通过索引的方式单独获取分组内匹配到的数据
# print(ret.group(2)) # c 可以通过索引的方式单独获取分组内匹配到的数据
'''针对search和match有几个分组 group方法括号内最大就可以写几'''
# 分组之后还可以给组起别名
# ret = re.search('a(?P<name1>b)(?P<name2>c)', 'abcabcabcabc')
# print(ret.group('name1')) # b
# print(ret.group('name2')) # c
collocations模块
'''提供了更多数据类型'''
# 1. 具名元组
# form collocations import namedtuple
# piont = namedtuple('学生','name age gender height weight')
# p1 = piont('petter', 18, 'male', 185, 70)
# p2 = piont('oscar', 18, 'male', 155, 70)
# print(p1.name) # 类似于封装数据
# print(p2.gender)
# >>>petter
# >>>male
# 2. 双端队列
'''
队列:先进先出
双端队列:两端都可以进出
'''
# from collections import deque
# p = deque([1,2,3])
# print(p)
# p.append('append') # 末尾追加数据
# print(p)
# p.appendleft('appendleft') # 左侧追加数据
# print(p)
# p.pop() # 弹出末尾数据
# print(p)
# p.popleft() # 左侧弹出数据
# print(p)
# >>>deque([1, 2, 3])
# >>>deque([1, 2, 3, 'append'])
# >>>deque(['appendleft', 1, 2, 3, 'append'])
# >>>deque([1, 2, 3, 'append'])
# >>>deque([1, 2, 3])
# 3. 字典相关
# 正常的字典内部是无序的,我们所看到的有序是pycharm优化的结果
# 不正常的字典(有序字典)
# from collections import OrderedDict
# dict1 = OrderedDict([('name','petter'),('age',18),('gender','male')])
# print(dict1)
# dict1['height'] = 185 # 添加数据
# print(dict1)
# print(dict1.keys()) # 查看所有key
# >>>OrderedDict([('name', 'petter'), ('age', 18), ('gender', 'male')])
# >>>OrderedDict([('name', 'petter'), ('age', 18), ('gender', 'male'), ('height', 185)])
# >>>odict_keys(['name', 'age', 'gender', 'height'])
# 数据筛选分类
# from collections import defaultdict
# list1 = [1, 5, 8, 9, 3, 4, 2, 6, 7]
# dict1 = defaultdict(list) # 新建空字典,每个value都是空列表[]
# for i in list1:
# if i % 2 == 0:
# dict1['单数'].append(i)
# else:
# dict1['双数'].append(i)
# print(dict1)
# >>>defaultdict(<class 'list'>, {'双数': [1, 5, 9, 3, 7], '单数': [8, 4, 2, 6]})
# 4.计数器
# 统计字符串中每个字符出现的次数
# res = 'dahfkjasdfhsaklhfjksdahfkhasdhfkjlah'
# from collections import Counter
# r = Counter(res) # 统计字符出现次数,组织成字典返回
# print(r)
# >>>Counter({'h': 7, 'a': 6, 'f': 5, 'k': 5, 'd': 4, 's': 4, 'j': 3, 'l': 2})
time模块
# 1. 常用方法
1. time.sleep()
程序休眠,括号内写休眠时长,单位为秒
2. time.time()
获取当前时间戳
# 2. 三种用于表示时间的格式(彼此间可以转换)
1. 时间戳time.time()
距离1970年1月1日0时0分0秒之间的秒数差
2. 结构化时间time.localtime()
该时间主要是给计算机看的,人看起来不方便
该方法可以跟一些后缀方法,可以获取想要的时间,方法见附表
3. 格式化时间time.strftime()
显示当前时间
该方法可以根据不同参数显示不同格式时间,参数可以连用,参数见附表
eg:
print(time.strftime('%Y-%m-%d %H:%M:%S'))
运行结果:
2022-03-29 17:12:38
| 后缀名 | 作用 |
|---|---|
| tm_year | 年 |
| tm_mon | 月 |
| tm_mday | 日 |
| tm_hour | 时 |
| tm_min | 分 |
| tm_sec | 秒 |
| tm_wday | 一周的第几天(0-6,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()时间戳>结构化时间
mktime()结构化时间>时间戳
# 结构化时间<--->格式化时间
strftime() 结构化时间>格式化时间
strptime() 格式化时间>结构化时间
'''ps:UTC时间比我所在的区域时间早八个小时(时区划分)'''
datetime模块
# 基本操作(取时间)
import datetime
# print(datetime.date.today()) # 2022-03-29
# print(datetime.datetime.today()) # 2022-03-29 17:31:15.470249
"""
date 意思就是年月日
datetime 意思就是年月日 时分秒
ps:后期很多时间相关的操作都是跟date和time有关系
"""
# 时间差
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(days=3) # 设置差值
print(ctime)
print(ctime + time_tel)
运行结果:
2022-03-29 17:55:41.965276
2022-04-01 18:55:41.965276
"""
针对时间计算的公式
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
"""
random模块
随机数模块
# 常用方法
# import random
# l1 = [1,2,3,4,5,6,7,8,9]
# print(random.random()) # 产生0-1之间的小数
# print(random.uniform(0,9)) # 产生0-9之间的小数
# print(random.randint(0,9)) # 产生0-9之间的整数
# random.shuffle(l1) # 打乱数据集顺序
# print(l1)
# print(random.choice(l1)) # 随机抽样
# print(random.sample(l1,3)) # 指定抽样个数
# >>>0.7754908818200633
# >>>7.940111856951369
# >>>5
# >>>[5, 4, 6, 3, 8, 1, 7, 9, 2]
# >>>4
# >>>[6, 9, 7]

浙公网安备 33010602011771号