p91-
pickle
-
将python中所以的数据类型,转换成字节串,序列化过程
-
将字节串转换成python中数据类型,反序列化过程
import pickle
s1 = 'aaa'
s2 = pickle.dumps(s1)
print(s2,type(s2))
# b'\x80\x04\x95\x07\x00\x00\x00\x00\x00\x00\x00\x8c\x03aaa\x94.' <class 'bytes'> 字节格式
s3 = b'\x80\x04\x95\x07\x00\x00\x00\x00\x00\x00\x00\x8c\x03aaa\x94.'
s4 = pickle.loads(s3)
print(s4,type(s4)) #aaa <class 'str'>
#pickle 不改变之前的数据类型格式
s1 = json.dumps((1,2,3,4))
s2 = json.loads(s1)
s3 = pickle.dumps((1,2,3,4))
s4= pickle.loads(s3)
print(s2,type(s2)) # [1, 2, 3, 4] <class 'list'>
print(s4,type(s4)) #(1, 2, 3, 4) <class 'tuple'>
#set集合格式 json 不能序列化,但是pickle 可以
set1 = {10,12,3}
p1 = pickle.dumps(set1)
print(p1,type(p1))
#b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00\x8f\x94(K\nK\x03K\x0c\x90.' <class 'bytes'>
#pickle对文件的操作
with open('a.txt',mode='wb') as f:
pickle.dump([1,2,3],f) #到文件要用dump ,此时a.txt文件中是乱码 �� ]�(KKKe.
with open('a.txt',mode='rb') as f:
result = pickle.load(f)
print(type(result)) #<class 'list'>
print(result) #[1, 2, 3]
# json一次性写到文件,一次性读取文件内容,pickle 可以多次
with open('a.txt',mode='wb') as f:
pickle.dump([1,2,3],f) #写入到txt 显示乱码
pickle.dump((2,3,4),f) #写入到txt 显示乱码
with open('a.txt',mode='rb') as f:
result = pickle.load(f)
result2 = pickle.load(f)
print(result) #[1, 2, 3]
print(type(result)) #<class 'list'>
print(result2) #(2, 3, 4)
print(type(result2)) #<class 'tuple'>
json 和 pickle 比较
- json :
- 不是所有的数据类型都可以序列化
- 不能多次多次对同一个文件序列化
- json数据可以跨语言
- pickle 相反
hashlib
- 封装一些加密的类
- md5() sha1 () 等
- 加密步骤:
- 1、获取一个加密对象
- 2、使用加密对象的update()方法
- 3、通过hexdigest()方法获取加密结果
import hashlib
m = hashlib.md5()
m.update('123456'.encode('utf-8')) #或者用 m.update(b'123456') ,中文不能用b'中国' 用encode
result = m.hexdigest()
print(result) #e10adc3949ba59abbe56e057f20f883e
- 加密算法,用于验证
import hashlib
m = hashlib.sha224()
m.update('123456'.encode('utf-8'))
result = m.hexdigest()
print(result) #f8cdb04495ded47615258f9dc6a3f4707fd2405434fefc3cbf4ef4e6
#把大的数据分割成不同的小块,分别加密再汇总,和直接加密是一样的结果
import hashlib
m = hashlib.md5()
m.update(b'abcdef')
print(m.hexdigest()) #e80b5017098950fc58aad83c8c14978e
m2 = hashlib.md5()
m2.update(b'abc')
m2.update(b'def')
print(m.hexdigest()) #e80b5017098950fc58aad83c8c14978e