总结
1. hashlib的使用
-
hash摘要(加密)的算法主要有两类: md5和sha-X
-
hash加密的特点
- hash算法生成的摘要不可逆(不能通过密文来获取原文)
- 只有相同的数据通过相同的算法得到的摘要才是一样的
- 不管原数据多大,产生的摘要的大小(长度)一致
-
生成hash摘要
- 通过算法创建hash对象:hashlib.算法名
- 算法名:md5, shaXXX
hash = hashlib.md5()
-
添加加密数据
hash对象.update(数据)(二进制数据)
注意: 数据必须时二进制数据,类型是bytes
-
补充: 二进制和字符串之间的相互转换
""" 字符串转二进制 方法一: bytes(字符串, encoding='utf-8) 方法二: 字符串.encode() 二进制转字符串 方法一: str(二进制, encoding='utf-8') 方法二: 二进制.decode() """ hash.update('123456'.encode())
- 获取摘要
result = hash.hexdigest() print(result) # e10adc3949ba59abbe56e057f20f883e
2. 文件操作
-
数据持久化
""" 程序中保存的数据默认都是保存在运行内存中的,在程序运行结束的时候都会被释放 如果希望这次运行程序产生的数据在下一次程序运行的时候还能用,就需要将数据保存到硬盘(磁盘)中 将数据保存到硬盘(磁盘)的过程就是数据持久化的过程 硬盘保存数据的基本单元是文件,所以如果要将数据保存到硬盘中,只需要将数据保存在文件中 程序中数据持久化的常用文件类型: 数据库文件(.db, .splite等), plist文件(.plist), json文件, txt, 二进制文件(图片,视频,音频,exe可执行文件) """
-
文件操作 - 操作文件的内容
""" 文件操作的基本流程:打开文件 -> 操作文件(读, 写) -> 关闭文件 """
- 打开文件
""" open(file, mode='r', *, encoding=None) - 以指定方式打开指定文件,返回一个文件对象 file - 需要打开的文件在计算机中的位置信息(文件路径), 字符串 文件路径分为绝对路径和相对路径 绝对路径:文件在计算机中的全路径(一般从盘开始写) 相对路径:. - 表示当前目录(当前代码文件所在的文件夹) .. - 表示当前目录的上层目录 mode - 文件打开方式,决定打开文件后后续能对文件进行的操作以及操作数据的类型 第一组: 'r', 'w', 'a' - 控制后续操作(读还是写) 'r' - 只读 'w' - 只写:打开会清空原文件内容 'a' - 只写:打开会保留源文件内容 第二组: 't', 'b' - 控制操作数据的类型 't' - 读操作返回的数据和写操作写入的数据是字符串(str) 'b' - 读操作返回的数据和写操作写入的数据是二进制(bytes) 第一组必须选一个, 第二组可以不选,不选的时候默认的是't'(txt文本) 注意:1.二进制文件打开的时候必须带b encoding - 文本文件的编码方式(需要保证写入数据采用的什么方式编码,读数据的时候就需要对应的方式解码) 一般采用utf-8,但是很多windows文本默认编码方式是gbk 注意:只有在以t的方式打开文本文件的时候才需要考虑给encoding 赋值 """
- 关闭文件
""" 文件对象.close() """
- 操作
""" 读操作 文件对象.read() - 从读写位置开始,读到文件结束(读写位置默认在文件开头) 文件对象.readline() - 从读写位置开始,读到一行结束 写操作 文件对象.write(数据) - 将数据写入指定文件中 """
3. 数据持久化
-
怎么做到数据持久化
""" 1)用一个文件来保存需要持久化的数据 2)程序中需要这个数据的时候从文件中读取这个数据 3)如果数据发生改变,需要把最新的数据再写入文件中 """ # 写一个程序打印程序执行的次数(自己创建一个文本count.txt) f = open('count.txt', encoding='utf-8') count = int(f.read()) count += 1 print(count) f = open('count.txt', 'w', encoding='utf-8') f.write(str(count))
-
eval函数
result = eval('100') print(result, type(result)) # 100 <class 'int'> result = eval('12.5') print(result, type(result)) # 12.5 <class 'float'> result = eval('[10, 20, 30]') print(result, type(result), result[-1]) # [10, 20, 30] <class 'list'> 30 result = eval(""" { 'name': '小明', 'age': 18, 'scores': [90, 88, 76, 99] } """) print(result, type(result)) # {'name': '小明', 'age': 18, 'scores': [90, 88, 76, 99]} <class 'dict'>