#! python3
'''
Python 获取字符串和文件的MD5值
'''
import hashlib  

def get_file_md5(filename):
    """
    计算文件的MD5值
    """
    m = hashlib.md5()  # 创建md5对象
    with open(filename, 'rb') as fp:
        while True:
            data = fp.read(4096) # 每次读取4MB 
            if not data:
                break 
            m.update(data) # 更新md5对象
    return m.hexdigest()


if __name__ == '__main__':
    # 计算字符串的MD5值
    content = "hello"
    md5hash = hashlib.md5(content.encode('utf8'))
    md5 = md5hash.hexdigest()
    print(md5)   # 5d41402abc4b2a76b9719d911017c592

    # 计算文件的MD5值: 本质是先将文件转为二进制文本,然后针对该文本做md5运算。
    filename = r'test.xlsx'
    with open(filename, 'rb') as fp:  # 模式要用'rb'
        data = fp.read()  # 一次将文件全部读入内存
    file_md5 = hashlib.md5(data).hexdigest() # 已经是byte不用encode
    print(file_md5)

    # 计算大文件的MD5值
    filename = r'test.xlsx'
    file_md5 = get_file_md5(filename)
    print(file_md5)