总结
hashilib 摘要加密
- hash 摘要(加密)的算法只有两类:md5 和 sha-x系列
- hash加密的特点
- hash算法生成的摘要不可逆。(不能通过加密文来获取原文)
- 只有相同的数据通过相同的算法得到的摘要才是一致的
- 不管原数据多大,产生摘要的大小(长度)是一致的
- 生成hash摘要
- 1通过算法创建hash对象,hashlib.算法名()
- 算法名()
import hashlib
hash = hashlib.md5()
print(hash)
# hash = hashlib.sha1()
-
2添加数据
- hash对象.update(数据)
- 注意:数据必须是二进制数据,类型是bytes
- 补充:将二进制和字符串之间相互转换
-
字符串转二进制:
-
bytes(字符串,enconding = ‘utf-8’)
-
字符串.encode() 这个函数的默认值就是 utf-8
hash.update(bytes('234',encoding='utf-8')) hash.update('23435'.encode())
-
-
二进制转字符串
- str(二进制,encoding=’utf-8‘)
- 二进制.decode()
-
获取摘要
result = hash.hexdigest() print(result)
# 判断文档是否被修改过 hash = hashlib.md5() with open('text.py','rb') as f: hash.update(f.read()) # print(hash.hexdigest())
文件操作
- 数据持久化
- 程序中保存的数据默认都是保存在运行内存中的,在程序运行结束的时候都会被释放。如果希望这次运行程序产生的数据在下一次运行程序的时候还能用,就需要将数据保存到硬盘中(磁盘里)
- 将数据保存到硬盘的过程就是数据持久化的过程。
- 硬盘保存数据的基本单位是文件,所以要将数据保存到硬盘中,只需要将数据保存在文件中
- 程序中数据持久化的常用文件类型:数据库文件(.db,.sqlite等),plist文件,json文件,txt文件,二进制文件(图片,视频,音频,exe可执行文件)
- 文件操作-操作文件内容
-
os 模块 操作文件名删除等
-
文件操作基本流程:打开文件—> 操作文件(读 写) --> 关闭文件
-
打开文件
""" open(file, mode='r', *, encoding=None) - 以指定方式打开指定文件,返回一个文件对象 a.file - 需要打开的文件在计算机中的位置信息(文件路径), 字符串 绝对路径:文件在计算机中的全路径(一般从盘开始写) 相对路径:. - 表示当前目录(当前代码文件所在的文件夹), ./可以省略 .. - 表示当前目录的上层目录 b. mode - 文件打开方式,决定打开文件后后续能对该文件进行的操作以及操作数据的类型。 第一组:'r'、'w'、'a' - 控制后续操作(是读还是写) 'r' - 只读 'w' - 只写, 会清空原文件内容 'a' - 只写, 会保留原文件内容 第二组:'t'、'b' - 控制操作数据的类型 't' - 读操作返回的数据和写操作写入的数据是字符串(str) 'b' - 读操作返回的数据和写操作写入的数据是二进制(bytes) 第一组必须选一个,第二组可以不选,不选的时候默认是t 注意:1.二进制文件打开的时候必须带b c. encoding - 文本文件的编码方式(需要保证写入数据采用的什么方式进行编码,读数据的时候就需要对应的方式解码), 一般采用utf-8,但是很多windows文本默认编码方式是gbk 注意:只有在以t的方式打开文本文件的时候才需要考虑给encoding赋值 """
# =========绝对路径=========== # open(r'/Users/yuting/授课/python2103/01语言基础/day14-异常捕获和文件操作/合同.txt') # =========相对路径========== # open(r'./合同.txt') # open('合同.txt') # open('./res/a.txt') # open('../day14-异常捕获和文件操作/合同.txt') # ========r是只读========= # f = open('./合同.txt', 'r') # f.read() # f.write('abc') # io.UnsupportedOperation: not writable # ========a是只写,并且保留原文件内容======= # f = open('./合同.txt', 'a') # f.write('abc') # # f.read() # io.UnsupportedOperation: not readable # ========w是只写,并且会清空原文件内容======= # f = open('./合同.txt', 'w') # f.write('abc') # f.read() # io.UnsupportedOperation: not readable # =========t,操作数据是字符串====== # f = open('./合同.txt', 'rt') # content = f.read() # print(type(content)) # <class 'str'> # =========b,操作数据是二进制====== # f = open('./合同.txt', 'rb') # content = f.read() # print(type(content)) # <class 'bytes'> # f = open('day7作业.mp4', 'rb') # f.read() # 2) 关闭文件 # 文件对象.close() # f.close() # f.read() # ValueError: read of closed file
# 3) 操作
# a. 读操作
"""
文件对象.read() - 从读写位置开始,读到文件结束。(读写位置默认在文件开头)
文件对象.readline() - 从读写位置开始,读到一行结束
"""
f = open('./res/a.txt', encoding='utf-8')
print('============1==============')
print(f.read())
print('=============2=============')
f.seek(0) # 将读写位置移动到文件开头
print(f.read())
print('=============3=============')
f.seek(0)
print(f.readline())
print('=============4=============')
print(f.readline())
print('=============5=============')
print(f.read())
print('=============6=============')
f.seek(0)
print(f.readlines()) # ['床前明月光,\n', '疑是地上霜。\n', '举头望明月,\n', '低头思故乡。']
# b.写操作
# 文件对象.write(数据) - 将数据写入指定文件中
f = open('./res/a.txt', 'w', encoding='utf-8')
f.write('abc')
数据持久化
- 怎么做到数据持久化
-
用一个文件来保存需要持久化的数据
-
程序中需要这个数据的时候就从文件中读取这个数据
-
如果数据发生改变,需要把最新的数据再写入文件中
# 写一个程序打印程序执行的次数 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))
2.eval函数
result = eval('100')
print(result,type(result))
result = eval('10.3')
print(result,type(result))
result = eval('[13,34,45]')
print(result,type(result))
result = eval('''{ 'name':'小猫',
'age':12
}''')
print(result,type(result))