day14-hashlib使用和文件操作

总结

hashilib 摘要加密

  • hash 摘要(加密)的算法只有两类:md5 和 sha-x系列
  1. hash加密的特点
  • hash算法生成的摘要不可逆。(不能通过加密文来获取原文)
  • 只有相同的数据通过相同的算法得到的摘要才是一致的
  • 不管原数据多大,产生摘要的大小(长度)是一致的
  1. 生成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()
  1. 获取摘要

    result = hash.hexdigest()
    print(result)
    
    # 判断文档是否被修改过
    hash = hashlib.md5()
    with open('text.py','rb') as f:
        hash.update(f.read()) #
    print(hash.hexdigest())
    

文件操作

  1. 数据持久化
  • 程序中保存的数据默认都是保存在运行内存中的,在程序运行结束的时候都会被释放。如果希望这次运行程序产生的数据在下一次运行程序的时候还能用,就需要将数据保存到硬盘中(磁盘里)
  • 将数据保存到硬盘的过程就是数据持久化的过程。
  • 硬盘保存数据的基本单位是文件,所以要将数据保存到硬盘中,只需要将数据保存在文件中
  • 程序中数据持久化的常用文件类型:数据库文件(.db,.sqlite等),plist文件,json文件,txt文件,二进制文件(图片,视频,音频,exe可执行文件)
  1. 文件操作-操作文件内容
  • 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')

数据持久化

  1. 怎么做到数据持久化
  • 用一个文件来保存需要持久化的数据

  • 程序中需要这个数据的时候就从文件中读取这个数据

  • 如果数据发生改变,需要把最新的数据再写入文件中

    # 写一个程序打印程序执行的次数
    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))
上一篇:Python MD5加密


下一篇:sklearn数据集与机器学习组成