异常捕获和文件操作

总结

  • hashlib的使用

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

# 1.hash加密的特点
"""
a.hash算法生成的摘要不可逆,(不能通过密文来获取原文)
b.只有相同的数据通过相同的算法得到的摘要才是一致
c.不管原数据多大,产生的摘要的大小(长度)一致
"""
# 2.生成hash摘要
# a.通过算法创建hash对象: hashlib.算法名()
# 算法名: md5、shaXXX

# b.添加数据
# hash对象.update(数据)
# 注意:数据必须是二进制数据,类型是bytes

# c.获取摘要
# hash.hexdigest()
# result = hash.hexdigest()
# print(result)
  • 补充
"""
字符串转二进制:
bytes(字符串)
字符串.encode()

二进制转字符串
str(二进制, encoding='utf-8')
二进制.decode()
"""
  • 文件操作

数据持久化

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

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

程序中数据持久化的常用文件类型:数据库文件(.db、.sqlite等)、plist文件、json文件、txt文件、
                           二进制文件(图片、视频、音频、exe可执行文件)
"""

文件操作 - 操作文件的内容

"""
文件操作基本流程:打开文件 -> 操作文件(读,写) -> 关闭文件
"""
# open(file, mode='r', *, encoding=None) - 以指定的方式打开指定文件,返回一个文件对象
# a.打开文件
"""
file  -  需要打开的文件在计算机中的位置信息(文件路径),字符串
        绝对路径:文件在计算机里的全路径(一般从盘开始写)
        相对路径:. - 表示当前目录(当前代码文件所在的文件夹)
                .. - 表示当前目录的上层目录
                
mode  -  文件打开方式,决定打开文件后后续能对该文件进行的操作以及才做数据的类型
         第一组必须选一个,第二组可以不选(默认是t)
         第一组:'r', 'w', 'a'  - 控制后续操作(是读还是写)
         'r'  -  只读
         'w'  -  只写(先直接清空原文件里的内容,然后再写要写的内容)
         'a'  -  只写(会在原来的内容后添加要写的内容)
         
          第二组:'t', 'b'  -  控制操作数据的类型()
          't'  -  读操作返回的数据和写操作写入的数据是字符串(str)
          'b'  -  读操作返回的数据和写操作写入否数据是二进制(bytes)
          
          注意:1、二进制文件打开的时候必须带b

encoding  -  文本文件的编码方式(需要保证写入数据采用的什么方式进行编码,读数据的时候就要用对应的方式解码)
            一般采用utf-8,但是很多windows文本默认编码方式是gbk
            注意:只有在以t的方式打开文本文件的时候才需要考虑给encoding赋值
"""
# =========绝对路径========
# 绝对路径
# open(r'G:\python2103\文档\包和模块.md')

# =========相对路径=======
# 相对路径
# open(r'./合同.txt')
# open('合同.txt')
# open('res/a.txt')
# ========r是只读========
# r是只读
# f = open('合同.txt', 'r', encoding='utf-8')
# f.read()
# f.write('abc')  # io.UnsupportedOperation: not writable

# =======a是只写,保留原文件的内容=========
# f = open('合同.txt', 'a')
# f.read()

# =======w是只写=========
# f = open('合同.txt', 'w')
# f.write('abcabcabcabca')


# ======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'>
# b.操作文件
# 读操作
"""
文件对象.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.read())
# print('===========5=============')
# f.seek(0)
# print(f.readlines())  # ['床前明月光\n', '疑是地上霜\n', '举头望明月\n', '低头思故乡']

# 写操作
# 文件对象.write(数据)  -  将数据写入指定文件中
# f = open('res/a.txt', 'a', encoding='utf-8')
# f.write('abc')
# b.关闭文件
# 文件对象.close()
# f.close()
# f.read()  # ValueError: read of closed file
  • 数据持久化
# 1.怎么做到数据持久化
"""
1).用一个文件来保存需要持久化的数据
2).程序中需要这个数据的时候就从文件中读取这个数据
3).如果数据发生改变,需要把最新的数据在写入文件中
"""

# 写一个程序打印程序执行的次数
# f = open('res/a.txt', encoding='utf-8')
# count = int(f.read())
# count += 1
#
# f = open('res/a.txt', 'w', encoding='utf-8')
# f.write(str(count))
# print(count)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值