• python day28--json,pickle,hashlib,logging


    一、json格式的限制

    1.json格式的key必须是字符串数据类型,如果是数字dumps后会被转为字符串。

    # dic = {1:2,3:4}
    # str_dic = json.dumps(dic)
    # print(str_dic)
    # new_dic = json.loads(str_dic)
    # print(new_dic)

    2.元组可以作为vaule但会被转为列表,并且不能作为key

    3.可以多次将数据dump进文件,但不能load出来。

    # dic = {'abc':(1,2,3)}
    # lst = ['aaa',123,'bbb',12.456]
    # with open('json_demo','w') as f:
    #     json.dump(lst,f)
    #     json.dump(dic,f)
    # with open('json_demo') as f:
    #     ret = json.load(f)
    #     print(ret)
    #报错

     4.想多次dump并load出来

    dic = {'abc':(1,2,3)}
    lst = ['aaa',123,'bbb',12.456]
    with open('json_demo','w') as f:
        str_lst = json.dumps(lst)
        str_dic = json.dumps(dic)
        f.write(str_lst+'
    ')
        f.write(str_dic+'
    ')
    
    with open('json_demo') as f:
        for line in f:
            ret = json.loads(line)
            print(ret)

    二、pickl

    1.dump的结果是bytes,dump用的f文件句柄需要以wb的形式打开,load所用的f是'rb'模式

    2.pickle支持几乎所有对象的

    把对象写入,及读出

    # class Student:
    #     def __init__(self,name,age):
    #         self.name = name
    #         self.age = age
    #
    # alex = Student('alex',83)
    # ret = pickle.dumps(alex)
    # 小花 = pickle.loads(ret)
    # print(小花.name)
    # print(小花.age)
    
    # class Student:
    #     def __init__(self,name,age):
    #         self.name = name
    #         self.age = age
    #
    # alex = Student('alex',83)
    # with open('pickle_demo','wb') as f:
    #     pickle.dump(alex,f)
    # with open('pickle_demo','rb') as f:
    #     旺财 = pickle.load(f)
    #     print(旺财.name)

    三、hashlib

    1.

    # 能够把 一个 字符串 数据类型的变量
    # 转换成一个 定长的 密文的 字符串,字符串里的每一个字符都是一个十六进制数字
    背下来
    # md5_obj = hashlib.md5()#或者sha1等
    # md5_obj.update(s1.encode('utf-8'))#encode必须要
    # res = md5_obj.hexdigest()
    # print(res,len(res),type(res))

    2.动态加盐,更加安全

    # username = input('username : ')
    # passwd = input('password : ')
    # md5obj = hashlib.md5(username.encode('utf-8'))
    # md5obj.update(passwd.encode('utf-8'))
    # print(md5obj.hexdigest())

    3.文件一致性检验

    # md5_obj = hashlib.md5()
    # with open('5.序列化模块_shelve.py','rb') as f:
    #     md5_obj.update(f.read())
    #     ret1 = md5_obj.hexdigest()
    #
    # md5_obj = hashlib.md5()
    # with open('5.序列化模块_shelve.py.bak','rb') as f:
    #     md5_obj.update(f.read())
    #     ret2 = md5_obj.hexdigest()
    # print(ret1,ret2)
  • 相关阅读:
    bind智能DNS + bindUI管理系统(mysql + bind dlz)
    什么情况下,英文单词中的k发音变g,t发音变d,p发音变b
    rsyn同步软链接保持不变
    yaml,json,ini这三种格式用来做配置文件优缺点
    自动挡车档位介绍
    "挡位"还是"档位",究竟谁错了
    Gitlab备份与恢复、迁移与升级
    树的名称大全
    手动档正确换档手势
    gitlab HA集群
  • 原文地址:https://www.cnblogs.com/snackpython/p/10147381.html
Copyright © 2020-2023  润新知