day 14异常捕获

异常捕获

import hashlib

hash摘要(加密)的算法主要有两类:md5和sha-X系列

  1. hash加密的特点
"""
1) hash算法生成的摘要不可逆。(不能通过密文来获取原文)
2) 只有相同的数据通过相同算法得到的摘要才是一致的
3) 不管原数据多大,产生的摘要的大小(长度)一致。
"""
  1. 生成hash摘要
# 1. 通过算法创建hash对象:hashlib.算法名()
	算法名:md5、shaXXX
hash = hashlib.sha512()
# 2) 添加数据
hash对象.update(数据)
注意:数据必须是二进制数据,类型是bytes

补充:二进制和字符串指甲你得相互转换:
"""
字符串转二进制:
bytes(字符串, encoding='utf-8')
字符串.encode()

二进制转字符串
str(二进制, encoding='utf-8')
二进制.decode()
"""
hash.update(bytes('12345', encoding='utf-8'))
hash.update('123456'.encode())
  1. 获取摘要
result = hash.hexdigest()
print(result)   # e10adc3949ba59abbe56e057f20f883e
# 练习:判断文件内容是否被修改
hash = hashlib.md5()

with open('day7作业.mp4','rb') as f:
	hash.update(f.read())
	
print(hash.hexdigest())

数据持久化

  1. 数据持久化
"""
程序中保存的数据默认都是保存在运行内存中的,在程序运行结束的时候都会被释放。
如果希望这次运行程序产生的数据在下一次运行程序的时候还能用,就需要将数据保存到硬盘中(磁盘中)。

将数据保存到硬盘的过程就是数据持久化的过程。
硬盘保存数据的基本单元是文件,所以如果要将数据保存到硬盘中,只需要将数据保存在文件中。

程序中数据持久化的常用文件类型:数据库文件(.db、.sqlite等)、plist文件、json文件、txt文件、
                          二进制文件(图片、视频、音频、exe可执行文件)
"""
  1. 文件操作 - 操作文件的内容
"""
文件操作基本流程: 打开文件  ->  操作文件(读、写)  -> 关闭文件
"""
# 1) 打开文件
"""
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 readab
     
# ========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')

数据持久化

"""
1)用一个文件来保存需要持久化的数据
2)程序中需要这个数据的时候就从文件中读取这个数据
3)如果数据发生改变,需要把最新的数据再写入文件中
"""

# 写一个程序打印程序执行的次数
f= open('count.txt', encoding='urf-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(12.5)
print(result, type(result))

result = eval([10, 20, 30])
print(result, type(result), result[-1])

result = eval("""
{
    'name': '小明',
    'age': 18,
    'scores': [90, 88, 76, 99]
}
""")
print(result, type(result))

作业

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值