zoukankan      html  css  js  c++  java
  • 序列化 加密 OS sys 模块

    序列化模块

    为什么要有序列化模块

    1.文件存取时,遇到的矛盾.
    	数据 读取出来时,反转不回去.
    2.凡是数据通过网络传出去最终的格式必须bytes
    

    序列化模块作用

    将一组数据结构转化成特殊的序列(特殊的字符串,bytes)并且还可以反转回去.
    

    序列化模块的分类

    json 模块: 是所有语言公认的一种序列.最最常用的
    	所以支持的python数据结构有限: int str bool dict list(tuple),None,float
    	
    pickle模块: 只能python语言中使用的,序列化模块:
    	支持python所有的数据类型以及对象.
    

    json模块的使用

    方法

    多个数据存储文件 主要用于网络传输
    dumps
    loads 
    单个数据的存取文件
    dump 
    load
    

    举例

    import json
    dic = {'username': '太白', 'password': 123,'status': False}
    ret=json.dumps(dic)
    print(ret,type(ret))
    ret_dict = json.loads(ret)
    print(ret,type(ret_dict))
    

    特殊的参数

    特殊的参数ensure_ascii确定是不是使用ascii码 sort_keys我可以给这个字典排序
    dic = {'username': '太白', 'password': 123,'status': False}
    ret = json.dumps(dic,ensure_ascii=False,sort_keys=True)
    print(ret,type(ret))
    

    json 文件的存取

    import json
    dic = {'username': '太白', 'password': 123,'status': False}
    #存入文件
    with open('jsonlx1.json',encoding='utf-8',mode='w') as f1:
        json.dump(dic,f1)
    
    #读取文件
    with open('jsonlx1.json',encoding='utf-8') as f1:
        dic1 = json.load(f1)
    print(dic1,type(dic1))
    

    多json数据的存取

    多个数据如何存储到一个文件中 必须换行 不然读取时不识别 会报错?
    import json
    dic1 = {'username': '太白', 'password': 123,'status': False}
    dic2 = {'username': 'alex', 'password': 123,'status': False}
    dic3 = {'username': 'ly', 'password': 123,'status': False}
    
    存
    with open('jsonmore.json',encoding='utf-8',mode='a') as f1:
      f1.write(f'{json.dumps(dic1)}
    {json.dumps(dic2)}
    {json.dumps(dic3)}')
    
    取
    with open('jsonmore.json',encoding='utf-8') as f1:
        for line in f1:
            ret = json.loads(line)
            print(ret,type(ret))
    

    pickle模块

    简历

    1.只能是网络传输
    2.只能python语言中使用的, 支持python所有的数据类型以及对象.
    

    方法

    只能是网络传输  直接转化为字节
         dumps
         loads  
    数据结构存取文件.
    	dump
        load 
    

    举例 dump load

    import pickle
    l1 = ['wusir', '太白', '小黑', 666]
    with open('pickle练习.pickle',mode='wb') as f1:
        pickle.dump(l1,f1)
    
    with open('pickle练习.pickle', mode='rb') as f1:
        ret = pickle.load(f1)
        print(ret,type(ret))
    
    
    
    import pickle
    #多个数据写入文件
    l1 = ['wusir', '太白', '小黑1', 666]
    l2 = ['wusir', '太白', '小黑2', 666]
    l3 = ['wusir', '太白', '小黑3', 666]
    #存
    with open('pickle练习1.pickle',mode='wb') as f1:
        # pickle.dump(l1,f1)
        # pickle.dump(l2,f1)
        # pickle.dump(l3,f1)
    
    #取
    with open('pickle练习1.pickle', mode='rb') as f1:
        # ret1 = pickle.load(f1)
        # ret2 = pickle.load(f1)
        # ret3 = pickle.load(f1)
        # print(ret1,ret2,ret3)
        while 1:
            try:
                ret1 = pickle.load(f1)
                print(ret1)
            except Exception:
                break
    

    举例 dumps,loads

    只能是网络传输  直接转化为字节
    l1 = ['wusir', '太白', '小黑', 666]
    ret = pickle.dumps(l1)
    print(ret)
    
    l2 = pickle.loads(ret)
    print(l2,type(l2))
    

    sys模块

    import sys
    # sys.path  ***
    # print(sys.version)  # 版本
    
    # for i in range(3):
    #     print(i)
    # # exit()  # 强制退出
    # # quit()
    # for i in range(5):
    #     print(i)
    
    # print(sys.platform)
    

    os 模块

    重点要记

    print(os.getcwd())#上一级绝对路径  ***
    print(__file__)  # 动态获取当前文件的绝对路径父级目录的获取:只用加上os.path.dirname(当前路径)即可
    os.path.dirname(os.path.dirname(__fifl__))#爷爷级路径
    
    print(os.chdir("dirname"))  改变当前脚本工作目录;相当于shell下cd  **
    print(os.curdir)  #返回当前目录: ('.')  **
    print(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' *
    
    

    path系列,和路径相关

    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(A,B)  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 拼接路径 ***
    os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间  **
    os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间  **
    # os.path.getsize(path) 返回path的文件大小 文件的字节数 ***
    
    

    和执行系统命令相关

    os.system("bash command")  运行shell命令,直接显示  **
    os.popen("bash command).read()  运行shell命令,获取执行结果  **
    os.environ  获取系统环境变量  **
    
    

    hashlib模块

    作用

    密码加密
    文件的一致性校验
    加盐就是加在前面
    sha系列: 安全系数高,耗时高.
    分步update 与一次性updete效果一样 所以文件效验可以for循环
    
    

    用法

    import hashlib
    new_md5 = hashlib.md5()  #创建hashlib的md5对象
    new_md5.update('字符串'.encode(‘utf-8))  #将字符串载入到md5对象中,获得md5算法加密#注意这里必须要编码,否则报错。
    print(new_md5.hexdigest())  #通过hexdigest()方法,获得new_md5对象的16进制md5显示。
    简单来说。就是三步:
    1,建立加密对象。2,对字符串进行算法加密。3,获得16进制显示
    
    

    加盐

    # 加固定盐
    ret = hashlib.md5('1'.encode('utf-8'))#1就是盐
    # ret.update('23456'.encode('utf-8'))#动态盐就是设置变量
    s = ret.hexdigest()
    print(s,type(s))
    
    

    文件加密效验

    import hashlib
    def md5_file(path):
        ret = hashlib.md5()
        with open(path,mode='rb') as f1:
            while 1:
                content = f1.read(1024)
                if content:
                    ret.update(content)
                else:
                    return ret.hexdigest()
    print(md5_file(r'D:s23day17python-3.7.4rc1-embed-win32.zip'))
    
    
  • 相关阅读:
    自己没有记住的一点小知识(ORM查询相关)
    博客系统(设计表时需要注意的)
    ajax补充--------FormData等...
    需要知道的小知识。。。
    apache服务器多端口支持
    oracle中database links的使用
    在linux下安装mysql
    linux下停止tomcat
    vsftpd 本地用户无法登陆 530 Login incorrect
    angularjs库及ionic库下载地址
  • 原文地址:https://www.cnblogs.com/saoqiang/p/12388543.html
Copyright © 2011-2022 走看看