• Python档案袋( Json、pickle、加密与解密)


    Json是各程序通用的数据格式;pickle是Python特有的,可以存储很多Python特有的数据,如函数地址等

    Json的简单使用:

     1 import json
     2 jsondata={
     3     "user":"dong",
     4     "name":"dongxiaodong",
     5     "age":100
     6 }
     7 #字典(json对象)转换为字符串
     8 strjson=json.dumps(jsondata)
     9 print(type(strjson)) #输出:<class 'str'>
    10 
    11 #字符串转换为json对象
    12 dicjson=json.loads(strjson)
    13 print(dicjson["age"]) #输出:100

    Pickle

    Pickle序列化:

     1 import pickle
     2 
     3 def funx1(valuex):
     4     print("---------------",valuex)
     5 
     6 jsondata={
     7     "user":"dong",
     8     "name":"dongxiaodong",
     9     "age":100,
    10     "funx":funx1 #保存函数地址,函数地址是以函数名确定的
    11 }
    12 
    13 #序列化,将字典转换为byte对象
    14 bytejson=pickle.dumps(jsondata)
    15 print(type(bytejson)) #输出:<class 'bytes'>
    16 
    17 #保存到文件中
    18 open("ww.txt","wb").write(bytejson)

    Pickle反序列化:

    import pickle
    
    #必须有序列化相同的函数名,只要函数名相同即可,参数任意
    def funx1():
        print("**********")
    
    strjson=open("ww.txt","rb").read()
    #字符串转换为json对象
    dicjson=pickle.loads(strjson)
    
    print(dicjson["age"]) #输出:100
    dicjson["funx"]() #调用函数,输出:**********

    Shelve(对pickle的上层封装)

    序列化

    import shelve
    
    #打开文件
    s=shelve.open("fileshelve")
    
    #建立列表数据
    listx=["11","22","33"]
    
    #保存数据
    s["listx"]=listx
    s["user"]="dongxiaodong"
    s["name"]="dong"
    
    #关闭文件
    s.close()

    反序列化:

    import shelve
    
    #打开文件
    s=shelve.open("fileshelve")
    
    print(s.get("listx")) #输出:['11', '22', '33']
    print(s.get("user")) #输出:dongxiaodong
    
    #关闭文件
    s.close()

    加密与解密:

    Base64 可逆

    import base64
    
    #加密
    en=base64.b64encode("dongxiaodong".encode("utf-8"))
    print(en.decode("utf-8"))  #输出字符串:ZG9uZ3hpYW9kb25n
    
    #解密
    de=base64.b64decode(en).decode("utf-8")
    print(de) #输出字符串:dongxiaodong

    md5 不可逆

    import hashlib
    
    #方法一
    mx=hashlib.md5() #s生成md5对象
    
    mx.update(b"dongxiaodong") #添加内容,拼接内容
    mx.update(b"dd")
    
    # 输出十六进制格式
    print(mx.hexdigest()) #输出:f67d530272ebb0cf17ec7cdf2372b6cb
    
    
    #方法二
    mx2=hashlib.md5(b"dongxiaodongdd") 
    
    print(mx2.hexdigest()) #输出:f67d530272ebb0cf17ec7cdf2372b6cb

    Sha1 不可逆

    import hashlib
    
    s=hashlib.sha1()
    
    s.update(b"dongxiaodongdd")
    
    print(s.hexdigest()) #输出:6a878a19687fc95d76f602d1580b54e0f0d2b88d

    Hmac

    键值对进行加密

    import hmac
    
    #参数(键,值)
    h=hmac.new(b"dd",b"dongxiaodong")
    
    #如果存在中文,则需要使用encode
    #h=hmac.new(b"dd","东小东dd".encode("utf-8"))
    
    print(h.hexdigest())
  • 相关阅读:
    转载在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
    笔试题Multicore简答题(上)
    笔试题Multicore简答题(下)
    转载深入理解const char*p,char const*p,char *const p
    笔试题mulicore编程题
    躺在被窝看蜗居,一连看到大结局,饿了揪把馒头,咽不下去吃点咸菜,我一边吃馒头,一边吃咸菜,一把抹鼻涕,一把抹眼泪
    //向块中用程序添加属性
    带参数的多线程
    扩展数据名 删除
    无法加载程序集。错误详细信息: Autodesk.AutoCAD.Runtime.Exception: eDuplicateKey
  • 原文地址:https://www.cnblogs.com/dongxiaodong/p/10496196.html
Copyright © 2020-2023  润新知