• 16、正则表达式、序列化与反序列化、猴子补丁、时间模块、random模块


    一、re模块

    正则表达式:

    模式 概述
    w 匹配字母数字及下划线
    W 匹配非字母数字下划线
    s 匹配任意空白字符,包括( f)
    S 匹配任意非空字符
    d 匹配任意数字,等价于[0-9]
    D 匹配任意非数字
    A 匹配字符串开始(只找开头的第一个)
     匹配字符串结束,如果存在换行则在换行前结束
    z 匹配字符串结束
    G 匹配最后匹配完成的位置
    匹配一个换行符
    匹配一个制表符
    ^ 匹配字符串的开头
    $ 匹配字符串的结尾
    . 匹配任意字符串,除了换行符,当re.DOALL标记,匹配任意
    [...] 用来表示一组字符,单独列出:[amk]匹配'a','m'或'k'
    [^...] 不在[]中的字符:[ ^abc ]匹配除了a,b,c之外的字符
    * 匹配0个或多个的表达式,贪婪方式
    + 匹配1个或多个的表达式
    匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
    {n} 精确匹配n个前面的表达式
    {n,m} 匹配n到m次由前面的正则表达式定义的片段,贪婪方式
    a|b 匹配a|或者b
    () 匹配括号内对的表达式,也表示一个组

    二、序列化与反序列化(eval)

    1、什么是序列化(为了跨平台)

    ​ 序列化指的是把内存的数据类型转换成一个特定的格式的内容

    ​ 该格式的内容可用于存储活着传输给其他平台使用

    ​ 内存中的数据类型----->序列化------>特定的格式(json格式或者pockle)

    2、为何要序列化

    ​ 序列化得到的结果---->特定格式的内容有两种用途:

    ​ 2.1、可以用于存储--->用于存档

    ​ 2.2、传输给其他平台使用---->跨平台数据交互

    ​ 强调!!

    ​ 针对用途1的特定格式:一种专用的格式pickle:只有python可以识别。

    ​ 针对用途2的特定格式:应该是一种通用的,能够被所有语言识别的格式

    ​ json

    3、如何序列化与反序列化

    #序列化
    import json
    res=json.dumps([1,'aaa',True,False])
    print(res)
    #输出结果
    [1, "aaa", true, false]#单引号==双引号,布尔值都小写
    
    #反序列化
    l=json.loads(res)
    print(l)
    #输出结果
    [1, 'aaa', True, False]
    
    import json
    #序列化
    # res=json.dumps([1,'aaa',True,False])
    # with open('test.json',mode='wt',encoding='utf-8')as f:
    # f.write(res)
    #简单化
    with open('test.json', mode='wt', encoding='utf-8')as f:
        json.dump([1,'aaa',True,False],f)
    
    
    #反序列化
    # with open('test.json',mode='rt',encoding='utf-8')as f2:
    #     res=f2.read()
    #     l=json.loads(res)
    #简单化
    with open('test.json',mode='rt',encoding='utf-8')as f2:
        l=json.load(f)
    

    用法完全适用于pickle!!

    补充:
    json格式兼容的是所有语言通用的数据类型,不能识别某一语言的所独有的
    类型。
    
    json强调!!
    l= json.loads('[1,"aaa",ture,false]')
    #格式没有单引号!没有大True与大Flase
    

    三、猴子补丁

    #猴子补丁只是一种思想,一种戏谑的称呼
    
    #本质原理:讲json中的dumps与dump,load与loads都替换成ujson的功能来提高效率,将其定义为一个函数,方便后续调用
    
    import json
    import ujson # pip3 install ujson安装ujson
    
    def monkey_patch_json():
        json.dump = ujson.dump
        json.dumps = ujson.dumps
        json.load = ujson.load
        json.loads = ujson.loads
    
    monkey_patch_json()
    

    四、时间模块

    ​ 时间分为三种格式

    1、时间戳
    print(time.time())
    
    2、格式化的字符串
    print(time.strftime('%Y-%m-%H'))
    
    3、结构化的时间
    res = time.localtime()
    print(res)
    
    #三者之间的格式可以通过内置的功能相互转换
    

    ​ datetime模块

    import datetime
    
    print(datetime.datetime.now())
    
    print(datetime.datetime.now() + datetime.timedelta(days=3.5))
    
    print(datetime.datetime.now() - datetime.timedelta(days=3.5))
    #这个datetime模块可以相互加减天数,时间
    

    五、random模块

    import random
    
    print(random.random())#(0,1)----float   大于0且小于1之间的小数
    
    print(random.randint(1,3)) #[1,3]大于等于1且小于等于3之间的整数
    
    print(random.randrange(1,3)) #[1,3) 大于等于1且小于3之间的整数
    
    print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5]
    
    print(random.sample([1,'23',[4,5]],2))#列表元素任意2个组合
    
    print(random.uniform(1,3))
    #大于1小于3的小数,如1.927109612082716
    
    item=[1,3,5,7,9]
    random.shuffle(item) #打乱item的顺序,相当于"洗牌"
    print(item)
    
    #编写的随机生成的验证码(字母加数字)
    
    print(ord('A'))#利用ASIC码的特性,将字母转为数字
    print(ord('Z'))
    print(chr(65))
    
    def make_code(size=4):
        res = ''
        for i in range(size):
            num = str(random.randint(0,9))
            s = chr(random.randint(65,90))
            res += random.choice([num,s])
        return res
    
    
    print(make_code(6))#可以通过指定参数来设置位数
    
  • 相关阅读:
    Android广播接收器和Activity间传递数据
    Android广播接收器里弹出对话框
    Android本地广播
    setSupportActionBar()方法报错
    exec使用小计
    关于NSA的EternalBlue(永恒之蓝) ms17-010漏洞利用
    20154312 曾林 ExpFinal CTF Writeup
    20154312 曾林 EXP9 Web安全基础
    20154312 曾林 Exp8 web基础
    20154312 曾林 EXP7 网络欺诈防范
  • 原文地址:https://www.cnblogs.com/zhaokunhao/p/14243448.html
Copyright © 2020-2023  润新知