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())