-
re模块补充说明
-
正则起别名及分组机制
-
collections模块
-
time与datetime模块
-
re模块补充说明
'''
findall默认是分组优先展示
正则表达式中如果有括号分组 那么在展示匹配结果的时候默认只演示括号正则表达式匹配的内容
也可以取消有限展示的机制
(?:) 括号前面加问号冒号
'''
'''
针对search和match有几个分组 group方法括号内最大就写几
'''
# 分组之后还可以给组起别名(findall无法使用)
res = re.search('a(?P<name1>b)(?P<name2>c)','abcabcabcabc')
print(res.group('name1')) # b
print(res.group('name2')) # c
collections模块
'''提供了更多的数据类型'''
# 1.具名元组
from collections import namedtuple
# 1.先产生一个元组对象模板
point = namedtuple('坐标',['x','y',])
# 2.创建诸多元组数据
p1 = point(1,2)
p2 = point(8,2)
print(p1,p2) # 坐标(x=1, y=2) 坐标(x=8, y=2)
print(p1.x) # 1
print(p2.y) # 2
'''具名元组的使用场景也非常广泛 比如数学领域、娱乐领域等'''
# 2.双端队列
队列:先进先出 默认是只有一端能进另一端能出
双端队列:两端都可以进出
import queue
q = queue.Queue(2) # 最多只能放三个元素
# 存放元素
q.put(1)
q.put(2)
# q.put(3) # 如果队列满了 继续添加则原地等待
# 获取元素
print(q.get()) # 1
print(q.get()) # 2
print(q.get()) # 如果队列空了 继续获取则原地等待
from collections import deque
q = deque([1,2,3])
print(q)
q.append(223) # 右边添加元素
print(q) # deque([1, 2, 3, 223])
q.appendleft(435) # 左边添加元素
print(q) # deque([435, 1, 2, 3, 223])
q.pop() # 右边弹出元素
q.popleft() # 左边弹出元素
# 3.字典相关
正常的字典内部是无序的
# 有序字典
from collections import OrderedDict
d = OrderedDict([('a',1),('b',2),('c',3)])
print(d) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
d['x'] = 1
d['y'] = 2
d['z'] = 3
print(d) # OrderedDict([('a', 1), ('b', 2), ('c', 3), ('x', 1), ('y', 2), ('z', 3)])
print(d.keys()) # odict_keys(['a', 'b', 'c', 'x', 'y', 'z'])
# 4.计数器
统计字符串中所有字符出现的次数
res = 'asdafadfadfsd'
new_dict = {}
for i in res:
if i not in new_dict:
# 字符第一次出现 应该创建一个新的键值对
new_dict[i] = 1
else:
new_dict[i] += 1
print(new_dict) # {'a': 4, 's': 2, 'd': 4, 'f': 3}
使用collections 模块中的 Counter方法:
from collections import Counter
r = Counter(res)
print(r) # {'a': 4, 's': 2, 'd': 4, 'f': 3}
print(r.get('a')) # 可以当字典使用
time模块
# 1.常用方法
1.time.sleep(secs)
推迟指定的时间运行,单位为秒
2.time.time()
获取当前时间戳
# 2.三种用于表达时间的格式(彼此之间可以转换)
1.时间戳
距离1970年1月1日0时0分0秒至此相差的秒数
time.time()
2.结构化时间
该时间类型主要是给计算机看的
time.localtime()
tm_year(年)
tm_mon(月) 1 - 12
tm_mday(日) 1 - 31
tm_hour(时) 0 - 23
tm_min(分) 0 - 59
tm_sec(秒) 0 - 60
tm_wday(周) 0 - 6 (0表示周一)
tm_yday(一年中的第几天) 1 - 366
tm_isdst(是否时夏令时) 默认为0
3.格式化时间
人最容易接收的一种时间格式 2000/1/21 11:11:11
time.strftime()
'%Y-%m-%d %H:%M:%S' # 2022-03-29 20:31:22
'%Y-%m-%d %X' # 2022-03-29 20:31:22
%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 当前时区的名称