今日内容概要

1.re模块的其他知识

2.正则起别名与分组机制

3.collections模块

4.time与datetime模块

5.random随机数模块

今日内容详细

re模块的其他知识

import re

res=re.findall('a(b)c','abcabcabcabc')
print(res) # ['b', 'b', 'b', 'b']

res1=re.findall('a(?:b)c','abcabcabcabc')
print(res1) # ['abc', 'abc', 'abc', 'abc']

res2 = re.findall('(a)(b)(c)','abcabcabcabc')
print(res2) # [('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c')]

res3 = re.findall('(?P<aaa>a)(b)(c)','abcabcabcabc')
print(res3) # [('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c'), ('a', 'b', 'c')]

"""
findall默认是分组优先展示
正则表达式中如果有括号分组 那么在展示匹配结果的时候
默认只演示括号内正则表达式匹配到的内容
也可以取消分组有限展示的机制
(?:) 括号前面加问号冒号
"""

"""
可以通过索引的方式单独获取分组内匹配到的数据
"""
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

collections 模块

collection模块 提供了更多的数据类型

1.具名元组
from collections import namedtuple

# 先产生一个元组对象模板
point = namedtuple('坐标',['x','y'])
# 创建诸多元组数据
p1 = point(1,2)
p2 = point(10,8)
print(p1,p2) # 坐标(x=1, y=2) 坐标(x=10, y=8)
print(p1.x) # 1
print(p1.y) # 2
person = namedtuple('人物','name age gender')
p1 = person('jason',18,'male')
p2 = person('kevin',28,'female')
print(p1,p2) # 人物(name='jason', age=18, gender='male') 人物(name='kevin', age=28, gender='female')
print(p1.name,p1.age) # jason 18

"""
具名元组的使用场景也非常的广泛 比如数学领域、娱乐领域等
"""
card = namedtuple('扑克牌', ['花色', '点数'])
c1 = card('黑桃', 'A')
c2 = card('黑梅', 'K')
c3 = card('红心', 'A')
print(c1, c2, c3)
print(c1.点数)

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.字典相关
正常的字典内部都是无序的

d1 = dict([('name','jason'),('pwd',123),('hobby','study')])
# print(d1) # {'pwd': 123, 'name': 'jason', 'hobby': 'study'}
print(d1.keys())
# 有序字典
from collections import OrderedDict
# d2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(d2)
d2['x'] = 111
d2['y'] = 222
d2['z'] = 333
print(d2)
print(d2.keys())

例题:
"""
有如下值集合 [11,22,33,44,55,67,77,88,99,999],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
"""
l1 = [11,22,33,44,55,67,77,88,99,999]
new_dict = {'k1':[],'k2':[]}
for i in l1:
if i > 66:
new_dict['k1'].append(i)
else:
new_dict['k2'].append(i)
print(new_dict)
from collections import defaultdict
values = [11, 22, 33,44,55,67,77,88,99,90]
my_dict = defaultdict(list) # 字典所有的值默认都是列表 {'':[],'':[]}
for value in values:
if value>66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)

4.计数器
res = 'abcdeabcdabcaba'
'''
统计字符串中所有字符出现的次数
{'a':3,'b':5...}
'''
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': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
from collections import Counter
r = Counter(res)
print(r) # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
print(r.get('a')) # 可以当成字典使用

time模块

#1.常用办法

1.time.time(secs)
推迟指定的时间运行,单位为秒
ps:该方法贯穿前后(基础,后期) 2.time.time()
获取当前时间戳

#2.三种用于表示时间的格式(彼此之间可以转换)

1.时间戳
距离1970年1月1日0时0分0秒至此相差的秒数
time.time()

2.结构化时间
该时间类型主要是给计算机看的,人看起来不太方便
time.localtime()
0 tm_year(年) 比如2011
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

3.格式化时间
人最容易接受的一种时间格式
2000/1/21 11:11:11
time.strftime()
'%Y-%m-%d %H:%M:%S' # 2022-03-29 11:31:30
'%Y-%m-%d %X' # 2022-03-29 11:31:30
%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")
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 11:55:50.883392

"""
date 意思就是年月日
datetime 意思就是年月日 时分秒
ps:后期很多时间相关的操作都是跟date和time有关系
"""

res = datetime.date.today()
print(res.year) # 2022
print(res.month) # 3
print(res.day) # 29
print(res.weekday()) # 1 星期0-6
print(res.isoweekday()) # 2 星期1-7

"""时间差"""
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(days=4) # 有很多时间选项
print(ctime) # 2022-03-29 12:01:52.279025
print(ctime + time_tel) # 2022-04-02 12:01:52.279025
print(ctime - time_tel) # 2022-03-25 12:03:34.495813

"""
针对时间计算的公式
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
"""
res = ctime + time_tel
print(res - ctime) # 4 days, 0:00:00

random模块

'''别名>>>:随机数模块'''

import random
print(random.random()) # 随机产生一个0到1之间的小数
print(random.uniform(2,4)) # 随机产生一个2到4之间的小数
print(random.randint(0,9)) # 随机产生一个0到9之间的整数(包含0和9)
print(random.randint(1,6)) # 掷骰子

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
random.shuffle(l) # 随机打乱一个数据集合 洗牌
print(l)
ll1 = ['特等奖','张飞抱回家','如花','百万现金大奖','群内配对']
print(random.choice(ll1)) # 随机抽取一个 抽奖
ll = ['如花','C老师','R老师','J老师','M老师','张飞','龙龙']
print(random.sample(ll, 2)) # 随机指定个数抽样 抽样
 

collections、time、datetime、random模块的更多相关文章

  1. Day13 Python基础之time/datetime/random模块一(十一)

    time模块 import time print(help(time)) time.time() #return current time in seconds since the Epoch as ...

  2. Python常用模块time & datetime &random 模块

    时间模块前言 在Python中,与时间处理有关的模块就包括:time,datetime 一.在Python中,通常有这几种方式来表示时间: 时间戳 格式化的时间字符串 元组(struct_time)共 ...

  3. python time模块 sys模块 collections模块 random模块 os模块 序列化 datetime模块

    一 collections模块 collections模块在内置的数据类型,比如:int.str.list.dict等基础之上额外提供了几种数据类型. 参考博客 http://www.pythoner ...

  4. Python——常用模块(time/datetime, random, os, shutil, json/pickcle, collections, hashlib/hmac, contextlib)

    1.time/datetime 这两个模块是与时间相关的模块,Python中通常用三种方式表示时间: #时间戳(timestamp):表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. ...

  5. 模块之 time datetime random json pickle os sys hashlib collections

    目录 1. time模块 1.1表示时间的几种方式: 1.2格式化字符串的时间格式 1.3不同格式时间的转换 2.datetim模块 3.random模块 4. json模块 4.1dumps.loa ...

  6. re模块,正则表达式起别名和分组机制,collections模块,time与datetime模块,random模块

    re模块和正则表达式别名和分组机制 命名分组 (1)分组--可以让我们从文本内容中提取指定模式的部分内容,用()来表示要提取的分组,需要注意的是分组 是在整个文本符合指定的正则表达式前提下进行的进一步 ...

  7. collections模块、时间模块、random模块、os模块、sys模块、序列化模块、subprocess模块

    一.collections模块 1.其他数据类型 在内置数据类型(str.dict.list.tuple.set)的基础上,collections模块还提供了了几个额外的数据类型:Counter.de ...

  8. python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re正则表达式)

    1.tiim模块,因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ print("time".ce ...

  9. Python常用模块(time, datetime, random, os, sys, hashlib)

    time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) :         通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运 ...

随机推荐

  1. Python入门随记(1)

    1.IDE Interactive Development Enironment,交互式开发环境 2.AI artificial intelligence 3.Python是一种格式严明(严格缩进)的 ...

  2. 常用QQ快捷键

    QQ是腾讯QQ的简称,是一款基于Internet即时通信(IM)软件.目前QQ已经覆盖Microsoft Windows.macOS.Android.iOS.Windows Phone.Linux等多 ...

  3. ArcMap操作随记(13)

    1.为地图册创建定位器地图 创建数据框→标注字段(PageName)→格网索引图层[导出数据]→图层右键,[属性]|[定义查询] 2.为地图册创建动态文本 导出→[文件]|[导出地图]→PDF 3.关 ...

  4. 网站SQL注入防御实战

    SQL注入作为直接威胁web业务的最严重攻击行为,已经被大多数的网站管理员所了解,这种通过HTTP标准端口,利用网页编码不严谨,提交精心构造的代码实现对数据库非授权访问的攻击方法,已经被越来越多的sc ...

  5. Java基础——日期类Date

    一.概述 date代表一个特定的时间,精确到毫秒 二.构造方法 方法名 说明 public Date() 分配一个Date对象,并初始化,以便它代表被分配的时间,精确到毫秒 public Date(l ...

  6. collections 数据类型扩展模块

    在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtuple和Ord ...

  7. 论php常见的问题[转载自原乌云]

    论PHP常见的漏洞 ′ 雨. · 2015/01/14 10:08 0x00 前言 里面很多都是像laterain学习到的, 如果能考上cuit的话 自动献菊花了. 0x01 安装的问题 首先拿到一份 ...

  8. P1030

    题面 给出一棵二叉树的中序排列与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度≤8). 输入格式 2行,均为大写字母组成的字符串,表示一棵二叉树的中序排列与后序排列. 输出格式 1 ...

  9. k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方?

    k8s集群Job Pod 容器可能因为多种原因失效,想要更加稳定的使用Job负载,有哪些需要注意的地方? 面试官:"计数性Job默认完成模式是什么?Indexed模式如何发布自定义索引呢?& ...

  10. 数据库MySql的学习(1)--基本操作

    转自 博客园-hoojo-http://www.cnblogs.com/hoojo/archive/2011/06/20/2085390.html 一.数据库简单介绍 1. 按照数据库的发展时间顺序, ...