今日内容概要

1.re模块的其他知识

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

3.collections模块

4.time与datetime模块

5.random随机数模块

今日内容详细

re模块的其他知识

  1. 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 模块

  1. 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.常用办法

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

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

    1.时间戳
    距离197011000秒至此相差的秒数
    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_wdayweekday0 - 60表示周一)
    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 当前时区的名称
    %% %号本身

时间类型的转换

  1. 格式化时间 <==> 结构化时间 <==> 时间戳

    # 时间戳<-->结构化时间
    gmtime
    localtime

    # 结构化时间<-->格式化时间
    strftime
    strptime
    time.strptime("2017-03-16","%Y-%m-%d")
    time.strptime("2017/03","%Y/%m") 前后必须一致
    ps:UTC时间比我所在的区域时间早八个小时(时区划分)

datetime模块

  1. # 基本操作

    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模块

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

    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)) # 随机指定个数抽样 抽样
  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 模拟RSA 加密与解密

    一.关于 RSA具体原理请移步其他文章,本文主要使用Python 来模拟RSA 算法的实现过程 二.简要分析 在RSA算法中,存在以下几个参数: 1.大素数p.q 2.n = p *q 3.Phi_n ...

  2. 装饰器property的简单运用

    property函数:在类中使用,将类中的方法伪装成一个属性 使用方法:在函数,方法,类的上面一行直接@装饰器的名字 装饰器的分类: 装饰器函数 装饰器方法:property 装饰类 class St ...

  3. 4月20日 python学习总结 套接字工作流程

    一.套接字工作流程 一个生活中的场景.你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了.等交流结束,挂断电话结束此次交谈. 生活中的场景就解释了这 ...

  4. [SniperOJ](web) Inject again 注入 过滤左右括号 order by

    0x00 题目概述 题目地址:http://web2.sniperoj.cn:10004/ 拿到题,尝试注入,发现有过滤. 进行fuzz,发现过滤了 左右括号,分号,等号 ,还有一些查询关键字 . 在 ...

  5. 关于如何让写自然溢出hash的无辜孩子见祖宗这件事

    关于如何让写自然溢出hash的无辜孩子见祖宗这件事 来源博客 这几天考试连着好几次被卡hash卡到死. 我谔谔,为什么连hash都要卡. 码力弱鸡什么时候才能站起来. 只需要任意两种字符,比如噫呜呜噫 ...

  6. (bzoj4408)[FJOI2016]神秘数(可持久化线段树)

    (bzoj4408)[FJOI2016]神秘数(可持久化线段树) bzoj luogu 对于一个区间的数,排序之后从左到右每一个数扫 如果扫到某个数a时已经证明了前面的数能表示[1,x],那么分情况: ...

  7. KMP 算法中的 next 数组

    KMP 算法中对 next 数组的理解 next 数组的意义 此处 next[j] = k:则有 k 前面的浅蓝色区域和 j 前面的浅蓝色区域相同: next[j] 表示当位置 j 的字符串与主串不匹 ...

  8. Linux(centos7)安装RabbitMQ

    由于RabbitMQ是由Erlang语言开发的,所以我们需要体检安装erlang语言的环境 下载这三个安装包:https://www.aliyundrive.com/s/4AxfTepHjMD 执行安 ...

  9. Java 中 sleep 方法和 wait 方法的区别?

    虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件 ...

  10. 介绍一下 WebApplicationContext ?

    WebApplicationContext 是 ApplicationContext 的扩展.它具有 Web 应用 程序所需的一些额外功能.它与普通的 ApplicationContext 在解析主题 ...