zoukankan      html  css  js  c++  java
  • time datetime random hashlib hmac requests re模块

    包的作用

    当模块内部函数过多时,为了方便管理模块,把一个模块划分成多个模块,但是又不能改变导入方式,把多个模块放入一个包(文件夹)内,未来导包就是到init

    1.包就是模块,包是拿来导入用的

    2.包是含有_inin_.py的文件夹,导包就是导入_init

    3.包一定是被当作模块文件导入,模块文件的搜索路径以执行文件的路径为准

    相对导入绝对导入:只能在包中内部使用

    #bao
    	#init.py
        from bao.m1 import * #from .m1 import *
        from bao.m2 import * #from .m2 import *
        #m1.py
        def f1():
            print("f1")
        def f2():
            print('f2')
        #m2.py
        def f3():
            print("f3")
        def f4():
            print('f4')
    #包的介绍.py
    from bao import *
    f1()
    f2()
    f3()
    f4()
    

    time模块

    作用

    提供了三种不同类型的时间(时间戳)、三种不同类型的时间可以相互转换

    时间戳形式

    print(time.time())
    

    格式化时间

    print(time.strftime('%Y-%m-%d %X'))
    

    结构化时间

    print(time.locatime())
    

    结构化时间—》格式化时间

    struct_time=time.localtime(3600*24*365)
    print(time.strftime('%Y-%m-%d %X',struct_time))
    

    结构化时间—》格式化时间

    format_time=time.strftime('%Y-%m-%d %X')
    print(time.strptime(format_time,'%Y-%m-%d %X'))
    

    结构化时间—》时间戳

    struvt_time=time.localtime(3600*24*365)
    print(time.mktime(struct_time)
    

    时间戳—》结构化时间

    time_stamp=time.time()
    print(time.localtime(time_stamp))
    

    datetime模块

    作用

    时间加减

    现在时间

    import datetime
    now=datetime.datetime.now()
    print(now)
    
    

    加减

    #默认3天
    print(now+datetime.timedelta(3))
    #加三周
    print(now+datetime.timedelta(weeks=3))
    #加三小时
    print(now+datetime.timedelta(hours=3))
    #减三小时
    print(now-datetime.timedelta(hours=3))
    print(now+datetime.timedelta(hours=-3))
    print(now.replace(year=1949, month=10, day=1, hour=10, minute=1, second=0, microsecond=0))
    
    

    random模块

    作用

    随机数

    掌握

    print(random.random())#0-1随机数
    print(random.randint(1,3))#【1-3】随机数
    
    # 打乱
    lt=[1,2,3]
    random.shuffle(lt)
    print(lt)
    
    # 随机选择一个
    print(random.choice(lt))
    
    #只随机一次--》梅森旋转算法
    import time
    #random.seed(time.time())#原理类似于默认值而不是时间的变化
    random.seed(0)
    
    

    了解

    print(random.sample([1,2,3,'a','b','c',4],2))# 列表随机两个数组合
    
    

    hashlib模块

    作用

    对字符加密

    import hashlib
    #叠加性
    m=hashlib.md5()
    m.update(b'say')
    m.update(b'hello')
    print(m.hexdigest())# 981fe96ed23ad8b9554cfeea38cd334a
    
    m.update(b'sayhello')
    print(m.hexdigest())# 981fe96ed23ad8b9554cfeea38cd334a
    
    

    hmac模块

    作用

    对字符加密,并且加上密钥

    import hmac
    m=hmac.new(b'maerzi')
    m.update(b'hash123456')
    print(m.hexdigest())# f82317e44545b0ab087109454814b5c4
    
    m=hmac.new(b'jfhsjfhshsdnjsd')
    m.uodate(b'hash123456')
    print(m.hexdigest()) # 2a70fd0f13cb49357f40d326a4e071a2
    
    

    typing模块

    作用

    与函数连用,控制函数参数的数据类型,提供了基础数据类型之外的数据类型

    from typing import Iterable
    def func(x:int,lt:Iterable)->list:
        return [1,2,3]
    func(10,'123123')
    
    

    requests模块

    作用

    爬虫,模拟浏览器对url发送请求,拿到数据

    import requests
    response=requests.get('https://ishuo.cn')
    data=response.text
    print(data)
    

    re模块

    作用

    去字符串找符合某种特点的字符串

    元字符

    import re
    # ^:以...开头
    s='abcdabc'
    res=re.findall('^ab',s)
    print(res)#['ab']
    
    res=re.findall('^bc',s)
    print(res)#[]
    
    # $:以...结尾
    s='abcdabc'
    res=re.findall('bc$',s)
    print(res)
    
    # .: 任意字符
    s='abc红abc'
    res=re.findall('abc.',s)
    print(res)#['abc红']
    
    # d: 数字
    s='sdsd12345sfsd'
    res=re.findall('d',s)
    print(res)#['1', '2', '3', '4', '5']
    
    # w: 非空,数字字母下划线
    s='gfg_45 4556csd'
    res=re.findall('w',s)
    print(res)#['g', 'f', 'g', '_', '4', '5', '4', '5', '5', '6', 'c', 's', 'd']
    res=re.findall('w+',s)
    print(res)#['gfg_45', '4556csd']
    
    # s:空 空格
    s='gfg_45 4556csd'
    res=re.findall('s',s)
    print(res)#[' ']
    
    # D: 非数字
    s='sdfg4654562hjhg'
    res=re.findall('D',s)
    print(res)#['s', 'd', 'f', 'g', 'h', 'j', 'h', 'g']
    
    # W: 空
    s='sdfsd_78 45df'
    res=re.findall('W',s)
    print(res)#[' ']
    
    # S: 非空
    s='sdfsd_78 45df'
    res=re.findall('S',s)
    print(res)#['s', 'd', 'f', 's', 'd', '_', '7', '8', '4', '5', 'd', 'f']
    
    # +:‘+’前面的一个字符至少一个
    s = 'abcddddd abcd abc'
    print(re.findall('abcd+',s))#['abcddddd', 'abcd']
    
    # ?: '?'前面的一个字符0-1个
    s = 'abcddddd abcd abc'
    print(re.findall('abcd?',s))#['abcd', 'abcd', 'abc']
    
    # *: '*'前面的一个字符至少0个
    s = 'abcddddd abcd abc'
    print(re.findall('abcd*',s))#['abcddddd', 'abcd', 'abc']
    
    # []: 中括号内的都可以 (个人理解:中括号中任意一个元素和外面的组合)
    s = 'abc bbc cbc dbc'
    print(re.findall('[abc]bc',s))#['abc', 'bbc', 'cbc']
    
    # [^]: 中括号内的都不可以
    s = 'abc bbc cbc dbc'
    print(re.findall('[^abc]bc',s))#['dbc']
    
    # |:或
    s = 'abc bbc cbc dbc'
    print(re.findall('abc|bbc',s))#['abc', 'bbc']
    
    # {}:{2}'{}'前面的字符2个 {3}'{}'前面的字符3个
    s = 'abccabc abccc'
    print(re.findall('abc{3}', s))#['abccc']
    
    # {}:{1,2}'{}'前面的字符1-2个 {1,3}'{}'前面的字符1-3个
    s = 'abccabc abccc'
    print(re.findall('abc{1,3}', s))#['abcc', 'abc', 'abccc']
    

    贪婪模式

    # .(任意字符)*(0-无穷个)
    s='abcdefgbbbbbbbbfdfjdsdbfdg'
    print(re.findall('a.*g',s))#['abcdefgbbbbbbbbfdfjdsdbfdg']
    

    非贪婪模式

    # .(任意字符)*(0-无穷个)?(让他进入非贪婪模式)
    s='abcdefgbbbbbbbbfdfjdsdbfdg'
    print(re.findall('a.*?g',s))#['abcdefg']
    
    

    bug

    # .(任意字符)*(0-无穷个)?(让他进入非贪婪模式)
    s='abcdefg'
    print(re.findall('.*?',s))#['', '', '', '', '', '', '', '']
    
    
    #匹配邮箱
    s = '#@#@#@nickchen121@163.com$$$$////nick@qq.com$$#$#$[]]2287273393@162.com@$2423423lksdlfj#'
    # w(字母/数字/下划线)+(0-无穷个)@ w(字母/数字/下划线)+(0-无穷个).com
    print(re.findall('w+@w+.com', s))
    
    

    了解:特殊构造

    # a(?=d)  :a后面是数字 但不要数字,不消耗字符串内容
    s = 'a123 aaaa a234 abc'
    print(re.findall('a(?=d)',s))#['a', 'a']
    print(re.findall('a(?=w)',s))#['a', 'a', 'a', 'a', 'a', 'a']
    
    

    函数

    # compile
    s = 'abcd abcddd abc'
    res=re.compile('abcd*')
    print(re.findall(res,s))#['abcd', 'abcddd', 'abc']
    
    #  match: 从开头找一个,找到了就不找了,找不到就报错
    s = 'ab abcddd abc'
    res=re.match('abcd*',s)
    print(res.group())#AttributeError: 'NoneType' object has no attribute 'group'
    
    #  search: 从字符串找一个,找到了就不找了
    s = 'ab abcddd abc'
    res=re.search('abcd*',s)
    print(res.group())#abcddd
    
    #  split 分割
    s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
    print(re.split('d+',s))#['ab', 'abcddd', 'abcasdfjlasjdk', 'l', 'lk', 'j', 'kl', 'kl', 'k', 'j', 'kl', 'j', 'lkj']
    
    #  sub :替换
    s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
    print(re.sub('d+',' ',s))#ab abcddd abcasdfjlasjdk l lk j kl kl k j kl j lkj
    
    #  subn: 替换 替换了多少次
    s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
    print(re.subn('d+',' ',s))#('ab abcddd abcasdfjlasjdk l lk j kl kl k j kl j lkj', 12)
    
    

    补充

    #  修饰符-》re.S会让。匹配换行符
    s = '''abc
    abcabc*abc
    '''
    print(re.findall('abc.abc',s))#['abc*abc']
    print(re.findall('abc.abc',s,re.S))#['abc
    abc', 'abc*abc']
    
    # 分组-》只要括号里的
    s = 'abc abcd abcdd'
    print(re.findall('a(.)c(d)',s))#[('b', 'd'), ('b', 'd')]
    
    #  有名分组
    s = 'abc abcd abcdd'
    print(re.search('a(?P<name1>.)c(?P<name2>d)',s).groupdict())#{'name1': 'b', 'name2': 'd'}
    
    #  超高级用法
    s = 'abc123abc123'
    print(re.sub('c(d+)a',' ',s))#ab bc123
    print(re.sub('c(?P<name>d+)a',' g<name> ',s))#ab 123 bc123
    
    
  • 相关阅读:
    riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期
    博客园文章编辑器5.0版本发布(markdown版)
    【开源】博客园文章编辑器4.0版发布
    博客园文章编辑器【客户端应用程序】V3.0.0发布
    博客园文章编辑器【客户端应用程序】V2.0.0发布,命名为51cnblogs
    在VSCode中编辑HTML文档时,在Dom标签上写style属性时智能提示的问题
    产品经理做什么?
    riot.js教程【二】组件撰写准则、预处理器、标签样式和装配方法
    riot.js教程【一】简介
    程序员的时间管理哲学——打造自己的分时管理系统
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/12578087.html
Copyright © 2011-2022 走看看