• 多测师肖sir_高级金牌讲师_python之模块008


    python之模块
    一、模块的介绍
    (1)python模块,是一个python文件,以一个.py文件,包含了python对象定义和pyhton语句

    在这里插入图片描述
    (2)python对象定义和python语句
    (3)模块让你能够有逻辑地组织你的python代码段。
    (4)把相关的代码分配到一个模块里能让你的代码更好用,更易懂
    (5)模块能定义函数,类和变量,模块里也能包含可执行的代码

    二、模块的导入
    注意点:
    (1)一个模块只要导入一次,不管你执行多少次import,一次就可以
    (2)模块不调用时是置灰状态

    1、
    格式:import 模块名
    使用:模块名.函数名
    案例:
    import time
    print(1)
    time.sleep(5) #休眠
    print(2)
    在这里插入图片描述
    在这里插入图片描述

    2、from 包名.模块名 import * (*表示所有的函数)
    from bao.aa import *
    案例:
    aa模块
    def func1():
    print(1)
    def func2():
    print(2)

    bb模块:
    from dcs.dcs1.aa import *
    func1()
    func2()
    在这里插入图片描述

    from time import *
    print(1)
    sleep(2)
    print(2)
    sleep(3)
    print(3)

    在这里插入图片描述

    3、from 包名.模块名 import 函数名 (*表示所有的函数)
    案例:
    aa文件:
    def gs():
    print(1)
    def gs1():
    print(2)
    def gs2():
    print(3)

    bb文件:
    from bao.aa import gs
    gs()

    在这里插入图片描述
    在这里插入图片描述
    4、
    通过取别名来调用函数
    格式:from 模块名 import 函数名 as 别名

    案例:
    aa模板
    def gs():
    print(1)
    def gs1():
    print(2)
    def gs2():
    print(3)bb模块:

    from bao.aa import gs as b
    b()
    在这里插入图片描述
    from time import sleep as s
    print(1)
    s(2)
    print(2)
    s(3)
    print(3)
    在这里插入图片描述
    以上四种导入方法

    =============================================
    模块讲解:

    一、time模块
    import time
    #1970年到现在经过的秒数
    print(time.time()) #1651200498.799537
    print(time.ctime()) #固定格式的当前时间
    print(time.sleep(3)) # 休眠,也是强制等待
    print(time.asctime()) #转化为asc码显示当前时间
    print(time.strftime(“%H-%M-%S %y-%m-%d”))
    在这里插入图片描述

    ==============================================
    二、random模块
    生成随机浮点数,帧数,字符串,甚至帮助你随机选择列表中的一个元素,打乱一组数据等;
    from random import *
    print(random()) #生成0-1之间的浮点数,但是能取到0,不能取到1
    print(randint(1,100)) #生成指定范围内整数,包括开始值和结束值
    print(randrange(1,100,2)) # 生成指定范围内的奇数
    print(randrange(0,100,2)) #生成指定范围内的偶数
    f=[1,2,3,6,7,2]
    print(sample(f,3)) #生成从一个固定集合中选n个数随机
    print(choice(f)) #随机生成一个字符
    shuffle(f) #洗牌
    print(list(f))
    在这里插入图片描述

    ==============================================
    string 模块
    print(string.digits) #0123456789 所有的数据
    print(string.hexdigits) #0123456789abcdefABCDEF
    print(string.ascii_uppercase) #ABCDEFGHIJKLMNOPQRSTUVWXYZ #所有的小写
    print(string.ascii_lowercase) #abcdefghijklmnopqrstuvwxyz #所有小写
    print(string.ascii_letters) #abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    在这里插入图片描述

    ==============================================
    作业:
    案例1:使用random模块随机生成手机号码、自己定义手机号码开头的前三位
    方法1:
    sz=string.digits
    sj=[‘159’]
    for i in range(8):
    s=choice(sz)
    sj.append(s)
    print(‘’.join(sj))

    方法2:
    from random import *
    import string
    sz=string.digits
    a=sample(sz,8)
    b=(‘’.join(a))
    sj=input(‘前三位:’)
    print(sj+b)

    方法3:
    from random import *
    import string
    sz=string.digits
    a=sample(sz,8)
    b=(‘’.join(a))
    sz=‘159’
    print(sz+b)

    方法4:
    from random import *
    import string
    sz=string.digits
    a=sample(sz,8)
    sz=[1,5,9]
    sz.extend(a)
    for i in sz:
    print(i,end=‘’)

    ==============================================

    2、用random模块随机生成6位数验证码

    方法1:
    from random import *
    a=[]
    for i in range(6):
    b=str(randint(0,9))
    a.append(b)
    print(‘’.join(a))

    方法2:
    from random import *
    import string
    d=string.digits+string.ascii_uppercase+string.ascii_lowercase
    print(d)
    for i in range(6) :
    s=choice(d)
    print(s, end=‘’)

    (2)
    import string,random
    a=string.ascii_letters + string.digits
    b= ‘’.join(random.choices(a,k=6))
    print(b)
    在这里插入图片描述

    方法3:
    import random
    import string
    yzm=string.digits+string.ascii_uppercase+string.ascii_lowercase
    print(yzm)
    a=random.sample(yzm,6)
    print(‘’.join(a))

    在这里插入图片描述
    方法4:
    a=[]
    for i in range(6):
    rand_num=random.randint(0,9)
    a.append(str(rand_num))
    print(‘’.join(a))
    方法5:
    import random
    import string
    print(‘’.join(random.sample(string.digits+string.ascii_lowercase,6)))

    方法6:
    from random import *
    import string
    def kk():
    a=string.digits+string.ascii_uppercase+string.ascii_lowercase
    k=[]
    for i in range(6):
    k.append(choice(a))
    s=‘’.join(k)
    return s
    code=kk()
    print(code)
    def hh():
    login=input(str(‘请输入上方验证码登录:’))
    if login==code:
    print(‘登录成功’)
    else:
    print(‘登录失败’)
    hh()

    方法7:

    import random
    import string
    str2 = ''
    for x in range(1, 7):
            str2 = str2 + str(random.choice(string.hexdigits))
    print(str2)```
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/8920bbf0debe4016b9fb991d3f401380.png)
    
    方法8import   random
    import string
    yanzhenma=''
    for i in range(6):
        s=str(random.choice(string.ascii_lowercase))
        S=str(random.choice(string.ascii_uppercase))
        d=str(random.choice(string.digits))
        yanzhenma += str(random.choice([s,S,d]))
    print(yanzhenma)
    
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/09f10e9db60945798f643b00d3f41179.png)
    
    
    
    ===========================================
    加密模块:
    import  hashlib
    base64
    MD5
    
    一、加密算法
    md5、rsa、AES ,DES.BASE
    DES 以64位为分组队数据加密,加密和解密是同一算法‘;
    rsa加密 算法:是一种非对称加密算法(在公开秘钥加密和电子商业中rsa被广泛使用)
    AES  rijndael   加密法对称加密中最流行的算法之一(AES为分组密码)
    链接:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/14bb21011871404bb46c1779ed54a5ac.png)
    
    
    ===================================
    
    案例:
    import  hashlib
    import base64
    #加密base64
    mima=base64.b64encode(b'123456')
    print(mima) #b'MTIzNDU2'
     解密base64
    jiemi=base64.b64decode(b'MTIzNDU2')
    print(jiemi) #b'123456'
    备注:base64  编码包含ascll是包含字符,二是二进制数据
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/a9aef33df694446aa443e7245664af7d.png)
    
    ===================================
    MD5加密
    (1)md5  是一种算法,可以将一个字符串或文件,md5后,就可以生成一个固定为128bit的串,这个串,基本上唯一;
    (2)python2中有md5
    (3)python将MD5 归纳到hash 模块,译作:‘散列’,直译为‘哈希’。
    (4)md5 可以把任意长度的输入,通过种hash算法,变换成固定长度的输出,该输出就是散列值,也称摘要值,,改算法就是哈希函数,也称摘要函数。(5)md5 是最常见的摘要算法,速度快,生成结果是固定16字节,通常用32位的16进制字符串表示。
    (5hash模块中包含MD5、sha1  ,sha256 ,sha512,等
    (6)摘要;hash.digest()  返回摘要,作为二进制数据字符串值;
    hash.hexdigeest  返回摘要,作为16进制数据字符串值
    (7)案例1import  hashlib
    m=hashlib.md5() # 创建MD5对象
    m.update(b"123456")
    print(m.hexdigest()) #e10adc3949ba59abbe56e057f20f883e
    案例2:
    
    ```python
    import  hashlib
    m=hashlib.md5(b'12346')
    print(m.hexdigest())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

    十六直径转换输出
    在这里插入图片描述

    备注:
    1、python中md5要加上b,python2不需要
    2、md5 不能范姐,但是加密是固定,关系是一一对应,可以被对撞。

    案例1
    import hashlib
    m=hashlib.sha384()
    m.update(b’123456’)
    print(m.hexdigest())
    在这里插入图片描述

    案例2
    import hashlib
    m=hashlib.sha256()
    m.update(b’123456’)
    print(m.hexdigest())

    在这里插入图片描述

    案例:
    import hashlib
    m=hashlib.sha512()
    m.update(b’123456’)
    print(m.hexdigest())
    在这里插入图片描述

    -==================================
    面试题:
    (1)如果在工作中有很多数据,如果数据被改动,或传递别修改,看不出?
    a、通过加密检查数据
    通过加密对数据进行加密处理,生成加密字符,如果有改动,字符就不相同
    b、比对数据不一样,如果加密的字符不相同,说明两个数据不一致

    =================================
    作业:
    通过md5加密算法把随机生成的6位数验证码进行加密返回16进制的字符串
    方法1:

    import hashlib
    c=[]
    num=string.ascii_lowercase+string.ascii_uppercase+string.digits
    for i  in  range(6):
        a=random.choice(num)
        c.append(a)
    yzm="".join(c)
    print("".join(c))
    m=hashlib.md5()
    m.update(yzm.encode(encoding='utf8'))
    print(m.hexdigest())2import string,hashlib
    s = []
    for i in range(6):
        c = random.choice(string.hexdigits)
        s.append(c)
    d = "".join(map(str, s))
    print(d)
    md5 = hashlib.md5()
    md5.update(d.encode())
    print(md5.hexdigest())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述
    方法2:

    import random
    import string
    num=string.ascii_lowercase + string.ascii_uppercase + string.digits
    a=random.sample(num,6)
    print("".join(a))
    x=''.join(a)
    import hashlib
    m=hashlib.md5()
    m.update(x.encode())
    print(m.hexdigest())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    方法3:

    str2 = ''
    for x in range(1, 7):
        str2 = str2 + str(random.choice(string.hexdigits))
    print(str2)
    
    import hashlib
    s = hashlib.md5()
    s.update(str2.encode())
    print(s.hexdigest())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    方法4:
    import string,random,hashlib
    a=string.ascii_letters + string.digits
    b= ‘’.join(random.choices(a,k=6))
    print(b)
    i=hashlib.md5(b.encode())
    print(i.digest())#二进制
    print(i.hexdigest()) #十六进制d79e570c55c76d7d57eded6a6ec3ec37
    (2)
    import string,random,hashlib
    a=string.ascii_letters + string.digits
    b= ‘’.join(random.choices(a,k=6))
    print(hashlib.md5(b.encode()).hexdigest())
    在这里插入图片描述
    解决编码格式问题:
    encode(‘utf-8’)
    encode()

    ===================================
    os模块:

    os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适 应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编 程时,经常和文件、目录打交道,所以离不了os模块。
    os模块中常见的方法:
    os.getcwd()获取当前执行命令所在目录
    os.path.isfile()判断是否文件
    os.path.isdir() #判断是否是目录
    os.path.exists() #判断文件或目录是否存在
    os.listdir(dirname) #列出指定目录下的目录或文件
    os.path.split(name) #分割文件名与目录
    os.path.join(path,name) #连接目录与文件名或目录
    os.mkdir(dir) #创建一个目录
    os.rename(old,new) #更改目录名称
    os.remove() 删除文件
    在这里插入图片描述

    ===========================
    固定格式:
    场景一:获取当前操作对象中的的的一个项目的绝对路径固定语法
    import os
    #获取项目路径
    p=os.path.abspath(os.path.dirname(os.getcwd()))
    print§

    #获取当前文件的绝对路径,直接通过spliit对目录和文件进行分割
    file_path=os.path.split(os.path.realpath(file))
    print(file_path)
    #(‘C:\Users\Administrator\PycharmProjects\gs1\bao’, ‘python006.py’)
    #获取当前文件的绝对路径,直接通过spliit对目录
    file_path=os.path.split(os.path.realpath(file))[0]
    print(file_path)
    #获取当前文件的绝对路径,直接通过spliit对目录
    file_path1=os.path.split(os.path.realpath(file))[1]
    print(file_path1)
    #获取项目的绝对路径
    v=os.path.dirname(os.path.dirname(file))
    print(v)
    #项目路径和包进行拼接
    hz_path=os.path.join(v,‘ss.txt’)
    print(hz_path) #C:/Users/Administrator/PycharmProjects/gs1\ss.txt

    ===========================
    python中re模块

    一、re正则匹配基本介绍
    正则匹配:使用re模块实现

    1、什么是正则表达式?
    正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特点的字符中,用正则表达字符来过滤的逻辑。
    2、正则表达式是一种文本模式;
    3、正则表达式可以帮助我们检查字符是否与某种模式匹配
    4、re模块使pyhton语言用有全部的表达式功能
    5、re表达式作用?
    (1)快速高效查找和分析字符比对,也叫模式匹配,比如:查找,比对,匹配,替换,插入,添加,删除等能力。
    (2)实现一个编译查看,一般在入职处理文件时用的多

    二、认识正则表达式中的特殊元素?
    \d:数字0-9
    \D:非数字
    \s:空白字符
    \n:换行符
    \w 匹配字母数字
    \W 匹配非字母数字
    ^:表示的匹配字符以什么开头
    $:表示的匹配字符以什么结尾
    :匹配前面的字符0次或n次 eg:ab (* 能匹配a 匹配ab 匹配abb )
    +:匹配+前面的字符1次或n次
    ?:匹配?前面的字符0次或1次
    {m}:匹配前一个字符m次
    {m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是

    1、findall
    从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个空列表[]
    2、match
    从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败得到一个none值
    注意:如果规则带了’+’,则匹配1次或者多次,无’+'只匹配一次
    3、compile(不考虑)
    编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]
    4、search
    从第一个字符开始查找、一找到就返回第一个字符串,找不到就不往下找,找不到则报错

    ============================
    group 以str 形式返回对象中match元素
    span 以tuple形式返回范围

    ====================================

    实战案例:
    场景一、findall
    从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个空列表[]
    (1)第一种情况查找字符汇总存在的字符
    import re
    str=‘abcdefghijkaaasssbb’
    x=re.findall(‘a’,str)
    print(x)
    在这里插入图片描述

    (2)第二种情况查找不存在的字符

    import  re
    str='abcdefghijkaaasssbb'
    x=re.findall('v',str)
    print(x)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    #[] 显示的是一个空了列表
    在这里插入图片描述

    在这里插入图片描述场景二、match 匹配开头
    从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败得到一个none值
    第一种情况:开头是匹配的是存在的字符
    import re # 导入re模块
    s=‘anbdckk12356afjmba’
    c=re.match(‘a’,s)
    print(c.span()) #显示结果是索引位:(0, 1)
    在这里插入图片描述
    在这里插入图片描述
    第二种情况:开头匹配的是不存在字符

    import  re
    str='abcdefghijkaaasssbb'
    x=re.match('b',str)
    print(x) 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    场景三、search
    从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
    第一种情况:查看的字符存在,返回字符的索引位
    import re # 导入re模块

    import  re
    str='abcdefghijkaaasssbb'
    x=re.search('b',str)
    print(x) #
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    第 二种情况:查看的字符不存在,返回字符的是none

    import  re
    str='abcdefghijkaaasssbb'
    x=re.search('m',str)
    print(x) # None
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    =============================================

    (1)\d:数字0-9 ,返回的结果是列表的格式
    案例:

    import  re
    str='abc3def5ghijka1aas2ssbb'
    x=re.findall('\d',str)
    print(x) # None
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    (2)\D:非数字
    案例:

    import  re
    str='abc3def5ghijka1aas2ssbb'
    x=re.findall('\D',str)
    print(''.join(x)) 
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    (3)\s:空白字符

    import  re
    str='a bc3def5ghi jka 1aas2ssbb'
    x=re.findall('\s',str)
    print(x) # [' ', ' ', ' ']
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    (4)\n:换行符
    案例:

    import  re
    str='a bc3def5ghi \n jka \n 1aas2ssbb'
    x=re.findall('\n',str)
    print(x) # ['\n', '\n']
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    (5)\r:回车符

    import  re
    str='a bc3def5ghi \rjk' 'a \r1a'\
        'as2ssbb'
    x=re.findall('\r',str)
    print(x) #
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    (5)\w 匹配字母数字
    案例:

    import  re
    str='a bc3d\rjka\r1a''as2ssbb'
    x=re.findall('\w',str)
    print(x)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    (6)\W 匹配非字母数字
    案例:
    import re # 导入re模块
    s=‘a nb1k123jmba’
    c=re.findall(‘\W’,s)
    print© #[’ ', '
    ’, ‘', '’, ‘', '’]

    import  re
    str='a&bc3d\rjk&a\r1a$as2ssbb'
    x=re.findall('\W',str)
    print(x)#['&', '\r', '&', '\r', '$']
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    (7)^:表示的匹配字符以什么开头

    案例:

    import  re
    str='a&bc3d\rjk&a\r1a$as2ssbb'
    x=re.findall('^a',str)
    print(x)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    $:表示的匹配字符以什么结尾
    案例:

    import  re
    str='a&bc3d\rjk&a\r1a$as2ssbb'
    x=re.findall('b$',str)
    print(x)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    • 匹配前面的字符0次或n次 eg:ab (* 能匹配a 匹配ab 匹配abb )
      案例:
    import  re
    str='a&bc3d\rjk&a\r1aa$as2ssbb'
    x=re.findall('a*',str)
    print(x)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    +:匹配+前面的字符1次或n次
    案例:

    import  re
    str='ab&bc3d\rbjk&a\r1aabbbb$as2ssbb'
    x=re.findall('b+',str)
    print(x)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    ?:匹配?前面的字符0次或1次
    案例:

    import  re
    str='ab&bc3d\rbjk&a\r1aab$as2ssbb'
    x=re.findall('b?',str)
    print(x)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    {m}:匹配前一个字符m次
    案例:

    import  re
    str='ab&bc3db\rbbbbjk&a\r1aabbb$as2ssbb'
    x=re.findall('b{4}',str)
    print(x)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    {m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是

    案例:

    import  re
    str='ab&bc3db\rbbbbjk&a\r1aabbb$as2ssbb111'
    x=re.findall('b{1,4}',str)
    print(x)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    ==========================================
    re 标识符:
    flags=标识符

    (1)re.I(大写的i) 不区分大小写

    import  re
    str='ab&bc3db\rbbaABCMNKbbjk&a\r1aabbb$as2ssbb111'
    x=re.findall('A',str,flags=re.I)
    print(x)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    ==========================================
    sub 替换

    import  re
    str='ab&bc3db\rbbaABCMNKbbjk&a\r1aabbb$as2ssbb1'
    x=re.sub('\d','多测师',str)
    print(x) #多测师aabbb$as多测师ssbb多测师
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    =================================

  • 相关阅读:
    网络安全内网渗透之信息收集--systeminfo查看电脑有无加域
    Linux上git的基本操作
    Jboss JMXInvokerServlet-deserialization漏洞复现
    python自动化第一篇—— 带图文的execl的自动化合并
    植物大战僵尸变态辅助开发系列教程(E语言实现和VC6实现)(下)
    使用Fiddler劫持网络资源为前端开发助力(示例:Dynamic CRM 表单开发 也能热更新? )
    系列二、类装载器ClassLoader
    WPF利用Path自定义画头部导航条(TOP)样式
    Open3D RANSAC拟合球
    动态规划:较小集合的累加和 + 限制集合中数字的个数
  • 原文地址:https://blog.csdn.net/m0_47403059/article/details/133827812