文章目录
一、序列化模块 json
1.什么是序列:
序列就是字符串
2.什么是序列化:
序列化就是把其他数据类型转换成json字符串的过程
3.什么是反序列化:
把json字符串转化成其他数据类型的过程就是反序列化
4 . json 模块用法
import josn 导入模块
dic = {'name':'sb','age':99} 定义字典
du = json.dumps(dic) dumps将字典转为json字符串,序列化
print(du) #{"name": "sb", "age": 99}打印出来时带有双引号的就是json字符串
print(json.loads(du)) loads将json字符串转换为字典,反序列化
with open('a.txt', 'w', encoding='utf-8')as f:
f.write(json.dumps(dic)) dumps将字典转为json字符串写入到文件
json.dump(dic, f) dump将字典转为json字符串写入到文件
with open('a.txt', 'r', encoding='utf-8')as fs:
res = json.load(fs) load将字符串json反序列化并从文件中读取出来
print(res)
二、pickle模块
pickle模块的使用方法和json模块是一样的,都是有四种方法,但是json模块支持的数据类型是有限的,而pickle模块是支持所有的数据类型但是转换的是二进制字符串;pickle只能在Python中使用,而json模块在所有的语言中都能使用。
import pickle
dic = {'name':'sb','age':99}
print(pickle.dumps(dic)) #b'\x80\x04\x95\x19\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x02sb\x94\x8c\x03age\x94Kcu.'
res = pickle.dumps(dic)
print(pickle.loads(res)) # {'name': 'sb', 'age': 99}
with open('a.txt', 'wb')as f:
pickle.dump(dic, f)
with open('a.txt', 'rb')as fs:
print(pickle.load(fs))
三、hashlib模块
hashlib 是一个提供了一些流行的hash(摘要)算法的Python标准库.其中所包括的算法有 md5, sha1, sha128, sha256, sha384, sha512等
什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
1. 加密算法的基本操作
# 1.选择加密算法,这里用的是md5
m = hashlib.md5()
# 2.需要加密的内容
m.update('我是jack'.encode('utf-8')) # .encode('utf-8')转换为二进制
# 3.打印加密结果
print(m.hexdigest()) # 33355fa205e22b729448725e26860473
1.不管你要加密的数据内容有多长,加密的结果长度都是一样的,前提是相同算法
2.只要加密的数据是一样的,那么加密的结果一定是一样的,前提是算法相同
练习题:注册用户名和密码加密后,再成功登陆
# 注册
username1 = input('输入账号')
password2 = input('输入密码')
m1 = hashlib.md5() # 1.确定加密算法
m1.update(password2.encode('utf-8')) # 2. 把输入的密码加密
new1 = m1.hexdigest()[0:16] # 3. 将获取的加密结果切片,让更加保密
der = '%s|%s' % (username1, new1) # 4. 取得用户名和加密后的密码
with open('aaa.txt', 'w', encoding='utf-8')as f:
f.write(der) # 5. 把取得用户名和加密后的密码写入到文件,注意我这里写的是覆盖写
# 登录
# 需要把登录账号的密码再次加密后作比较
username = input('user>>>>>>>') # 1.输入注册好的用户名
password = input('password>>>') # 2.输入注册好的用户密码
m = hashlib.md5() # 3.确定加密算法
m.update(password.encode('utf-8')) # 4. 再次把输入的密码加密,这样才能登录验证
new = m.hexdigest()[0:16] # 5. 再次把输入的密码加密结果切片
with open('aaa.txt', 'r', encoding='utf-8')as f:
new_username,new_password = f.read().split('|') # 6.读取文件后的结果切分并且赋值给new_username,new_password这两个变量名
if new_username==username and new_password == new: # 7.判断用户名和加密后的密码是否正确
print('登录成功')
else:
print('账号或密码错误')