zoukankan      html  css  js  c++  java
  • 17、hashlib、subprocess、os、sys、configparser

    一、hashlib模块

    ​ hash算法:传入一段内容会得到一串hash值,hash值有三大特点:

    ​ 1、如果传入的内容与采用的算法一样,那么得到的hash值一定一样

    ​ 2、只要采用的算法是固定的,hash值的长度就是固定的,不会随着内容的

    ​ 增多而变长

    ​ 3、hash值是不可逆的,即不能通过hash值反解出内容是什么

    ​ 1+2==》校验文件的完整性

    ​ 1+3==》加密

    import hashlib
    
    m = hashlib.md5()  # m 为hash工厂
    m.update('hello'.encode('utf-8'))#接受的是byles类型
    m.update('你好'.encode('utf-8'))
    m.update('我是'.encode('utf-8'))
    m.update('你爸爸'.encode('utf-8'))  # 可以不断的增加
    res = m.hexdigest()  # 拿到的是“hello 你好 我是 你爸爸”
    print(res)
    
    m = hashlib.md5()  # m 为hash工厂
    m.update('hello你好我是你爸爸'.encode('utf-8'))
    res2 = m.hexdigest()
    print(res2)
    # 输出结果:
    # 0b5a3045f24819e9448c8ab9d660f017
    # 0b5a3045f24819e9448c8ab9d660f017
    

    如果文件较大,可以选取样本校验

    import hashlib
    
    f=open('a.txt',mode='rb')
    f.seek()#校验较大的文件时,选取几个样本点去校验
    f.read(2000)
    m.update()
    m.hexdigest()
    

    密码加盐

    import hashlib
    
    m = hashlib.md5()
    
    m.update("天王盖地虎".encode('utf-8'))
    m.update("123egon".encode('utf-8'))
    m.update("egon一米五".encode('utf-8'))
    print(m.hexdigest())
    

    二、subprocess模块

    ​ 用来执行系统命令的

    ​ 文件的命名方式也要同变量名一样,不要选和python里函数一样的名字

    ​ 我命名的文件为subprocess,调用的subprocess的时候报错了QAQ

    import subprocess
    import time
    
    obj = subprocess.Popen("tassadfsadfklist",
                           shell=True,
                           stdout=subprocess.PIPE,#正确管道
                           stderr=subprocess.PIPE#错误管道
                           )
    
    print("=============>", obj)
    
    stdout_res = obj.stdout.read()
    stderr_res = obj.stderr.read()
    
    print(stdout_res.decode('gbk'))
    print(stderr_res.decode('gbk'))
    

    三、os与sys模块

    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
    os.curdir  返回当前目录: ('.')
    os.pardir  获取当前目录的父目录字符串名:('..')
    os.makedirs('dirname1/dirname2')    可生成多层递归目录
    os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
    os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
    os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    os.remove()  删除一个文件
    os.rename("oldname","newname")  重命名文件/目录
    os.stat('path/filename')  获取文件/目录信息
    os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep    输出当前平台使用的行终止符,win下为"
    ",Linux下为"
    "
    os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
    os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    os.system("bash command")  运行shell命令,直接显示
    os.environ  获取系统环境变量
    os.path.abspath(path)  返回path规范化的绝对路径
    os.path.split(path)  将path分割成目录和文件名二元组返回
    os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
    os.path.basename(path)  返回path最后的文件名。如何path以/或结尾,那么就会返回空值。即os.path.split(path)的第二个元素
    os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
    os.path.isabs(path)  如果path是绝对路径,返回True
    os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
    os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
    os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
    os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
    os.path.getsize(path) 返回path的大小
    

    sys模块

    1 sys.argv           命令行参数List,第一个元素是程序本身路径
    2 sys.exit(n)        退出程序,正常退出时exit(0)
    3 sys.version        获取Python解释程序的版本信息
    4 sys.maxint         最大的Int值
    5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    6 sys.platform       返回操作系统平台名称
    

    打印进度条

    import time
    
    
    def progress(percent):
        if percent > 1:
            percent = 1
        res = int(50 * percent) * '#'
        print('
    [%-50s] %d%%' % (res, int(100 * percent)), end='')
    
    
    recv_size = 0
    total_size = 102555
    while recv_size < total_size:
        time.sleep(0.1)
        recv_size += 1024
        percent = recv_size / total_size
        progress(percent)
    
    

    四、configparser模块

    config.ini

    # 注释1
    ; 注释2
    
    [section1]
    k1 = v1
    k2:v2
    user=egon
    age=18
    is_admin=true
    salary=31
    [section2]
    k1 = v1
    k2 = 1.11
    
    import configparser
    
    config = configparser.ConfigParser()
    config.read('config.ini')  # 读取配置文件
    # 获取sections
    print(config.sections())
    # 获取某一section下的所有的options
    print(config.options(('section1')))
    # 获取litems
    print(config.items('section1'))
    # 获取指定的东西
    print(config.get('section1', 'user'))
    # 获取的是str,可以转换数字类型
    print(config.getint('section1', 'age'))
    # 获取布尔值,兼容josn
    print(config.getboolean('section1', 'is_admin'))
    # 获取浮点型
    print(config.getfloat('section2', 'k2'))
    
  • 相关阅读:
    Selenium上传文件方法总结
    Maven安装配置
    selenium 3+java 配置全
    使用Eclipse创建Maven项目
    maven 学习
    解决Tomcatt下连接数据库的classNoFount问题
    Cookie的使用
    登录验证
    Servlet概述
    计算机科学学院静态网页
  • 原文地址:https://www.cnblogs.com/zhaokunhao/p/14247610.html
Copyright © 2011-2022 走看看