总结
1. hashlib模块
-
hash摘要(加密)的算法主要有两类:md5和sha-X系列
-
hash加密
""" 1) hash摘要算法生成的摘要不可逆。(不能通过密文来获取原文) 2) 只用相同的数据通过相同的算法得到的摘要才是一致的。 3) 不管原数据多大,产生的摘要的大小(长度)是一致的。 """
-
生成hash摘要
""" 1) 通过算法创建hash对象: hashlib.算法名() # 算法名: md5、 shaXXX """ import hashlib hashmd5 = hashlib.md5() hashsha = hashlib.sha256()
-
添加数据
# hash对象.update(数据) # 注意:数据必须是二进制, 类型是bytes # 补充:二进制和字符串之间的相互转换 """ 字符串转二进制: bytes(字符串, encoding='utf-8' 字符串.encode() # 编码 二进制转字符串: str(二进制, encoding='utf-8') 二进制.decode() # 解码 """ hashmd5.update(bytes("123456", encoding='utf-8')) print(hashmd5) hashmd5.update("123456".encode()) hashsha = hashlib.sha256('123456'.encode())
-
获取摘要
# hash.hexdigest() result = hashmd5.hexdigest() print(result) # ea48576f30be1669971699c09ad05c94 print(hashsha.hexdigest()) hashsha.update("""pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。 目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。 Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。""".encode()) result = hashsha.hexdigest() print(type(result))
-
2. 数据持久化
-
什么是数据持久化
""" 程序中保存的数据默认都是保存在运行内存中的,在程序运行结束的时候都会被释放。 如果希望这次运行程序产生的数据在下一次运行程序的时候还能用,就需要将数据保存到硬盘中() 将数据保存到硬盘的过程就是数据持久化的过程。 硬盘保存数据的基本单位是文件,所以如果要将数据保存到硬盘中,只需要将数据保存在文件中。 程序中数据持久化的常用类型:数据库文件(.db、.sqilte等)、plist文件、json文件、txt文件、 二进制文(图片、音频、exe可执行文件) """
-
文件操作 - 操作文件内容
-
打开文件
""" open(file, mode='r', *, encoding=None) - 已指定方式打开指定文件,返回一个文件对象 a) file - 需要打开的文件在计算机中的位置信息(文件路径) 绝对路径:文件在计算机中的全路径(一般从盘开始写) r'D:\Qianfeng-Python-2103\PycharmProjects\day14' 相对路径:. - 表示当前目录(运行程序文件所在的路径) .. - 表示当前目录的上级目录 ... - 表示当前目录的上层目录的上层目录 b) mode - 文件打开方式,决定打开该文件后能继续对文件能进行的操作以及操作的类型 第一组:'r'、'w'、'a' - 控制后续操作(是读是写) 第二组:'t'、'b' - 控制操作数据的类型 第一组必须选一个,第二组可以不选,不选默认是t ’r' - 只读 'w' - 只写,会清空原文件 'a' - 只写,会保留源文件内容 第二组:'t'、'b' - 控制操作数据的类型 't': - 读操作返回的数据和写操作写入的数据是字符串(str) ’b': - 读操作返回的数据和写操作写入的数据是二进制(bytes) 注意:1.二进制文件打开的时候必须带b c) encoding - 文本文件的编码方式(需要保证写入数据采用的什么方式进行编码读数据的时候就 需要对应的方式解码) 一般采用utf-8, 但是很多windows文本默认编码方式是gbk 注意:只有在以t的方式打开文本文件的时候才需要考虑给encoding赋值 """ # open(r'.\tes.txt') # FileNotFoundError: [Errno 2] No such file or directory: '.\\tes.txt' # open(r'D:\Qianfeng-Python-2103\PycharmProjects\day14\text.txt') # f = open(r'.\text.txt', 'rb') # text = f.read() # print(text.decode(), type(text)) # # f.close() # # f = open(r'.\text2.txt', 'rb') # # text = f.read() # print(text, type(text))
-
操作文件
# a. 读操作 """ 文件对象.read() - 从读写位置开始,读到文件结束。(读写位置到文件结尾) """ with open(r'./text.txt', encoding='utf-8') as f: print(f.read()) # 床前明月光,... f.seek(0) # 将读写位置移动到文件开头 print(f.read()) # 床前明月光,... with open(r'./text.txt', encoding='utf-8') as f: text = f.readline() while text: print(text, end='') text = f.readline() f.seek(0) print(f.readlines()) # ['床前明月光,\n', '疑是地上霜。\n', '举头望明月,\n', '低头思故乡。'] # b. 写操作 # 文件对象.write(数据) - 将数据写入到指定文件中 with open(r'.\text.txt', 'ab') as f: f.write('abc'.encode()) with open(r'.\text.txt', 'a', encoding='utf-8') as f: f.write('abc')
-
关闭文件
# 文件对象.close() # f.close()
-
-
eval函数
result = eval('100') print(result, type(result)) # 100 <class 'int'> result = eval('10.43') print(result, type(result)) # 10.43 <class 'float'> result = eval('[10, 23, 43, 23]') print(result, type(result)) # [10, 23, 43, 23] <class 'list'> result = eval("10 if True else 18") print(result) # 10
作业
# homework.py
import hashlib
def login_page():
print("".center(40, '='))
print("学生管理系统登录页面".center(30, ' '))
print()
print("❀ 1. 登 录".center(33, ' '))
print("❀ 2. 注 册".center(33, ' '))
print("❀ 3. 退 出".center(33, ' '))
print()
print("".center(40, '='))
def login():
name = input('请输入用户名:')
pwd = input('请输入密码:')
hash_pwd = hashlib.md5()
hash_pwd.update(pwd.encode())
userinfos = get_userinfo()
for info in userinfos:
if info['name'] == name and info['pwd'] == hash_pwd.hexdigest():
return True
return False
def register():
name = input('请输入用户名:')
pwd = input('请输入密码:')
userinfos = get_userinfo()
for info in userinfos:
if info['name'] == name:
return False
hashpwd = hashlib.md5()
hashpwd.update(pwd.encode())
userinfos.append({'name': name, 'pwd': hashpwd.hexdigest()})
save_userinfo(userinfos)
return True
def get_userinfo() -> list:
f = open(r'./useinfo.txt', 'rb')
text = f.read().decode()
# users = eval(text)
users = json.loads(text) # 改json数据格式
f.close()
return users
def save_userinfo(userinfos: list):
f = open(r'./useinfo.txt', 'wb')
# f.write(str(userinfos).encode())
json_str = json.dumps(userinfos)
f.write(json_str.encode())
f.close()
# homeworkMain.py
from homework import *
from datetime import datetime
import time
is_login = False
login_time = None
while True:
login_page()
choice = input('请选择:')
if choice == '1':
if login():
print('登录成功!')
is_login = True
login_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
break
else:
print('登录失败!')
elif choice == '2':
if register():
print('注册成功!')
else:
print('注册失败!')
elif choice == '3':
print('退出系统...')
break
if is_login:
print('正在进入用户界面...')
time.sleep(3)
useinfo.txt
[]