有没有什么简单的方法可以在Python中生成(并检查)文件列表的MD5校验和?(我有一个小程序,我正在工作,我想确认文件的校验和)。


当前回答

hashlib.md5(pathlib.Path('path/to/file').read_bytes()).hexdigest()

其他回答

将file_path更改为您的文件

import hashlib
def getMd5(file_path):
    m = hashlib.md5()
    with open(file_path,'rb') as f:
        lines = f.read()
        m.update(lines)
    md5code = m.hexdigest()
    return md5code

在Python 3.8+中,你可以像这样使用赋值操作符:=(以及hashlib):

import hashlib
with open("your_filename.txt", "rb") as f:
    file_hash = hashlib.md5()
    while chunk := f.read(8192):
        file_hash.update(chunk)

print(file_hash.digest())
print(file_hash.hexdigest())  # to get a printable str instead of bytes

考虑使用hashlib。Blake2b而不是md5(在上面的代码片段中用Blake2b替换md5)。它是加密安全的,比MD5更快。

你可以使用simple-file-checksum1,它只使用subprocess来调用macOS/Linux的openssl和Windows的CertUtil,并只从输出中提取摘要:

安装:

pip install simple-file-checksum

用法:

>>> from simple_file_checksum import get_checksum
>>> get_checksum("path/to/file.txt")
'9e107d9d372bb6826bd81d3542a419d6'
>>> get_checksum("path/to/file.txt", algorithm="MD5")
'9e107d9d372bb6826bd81d3542a419d6'

支持SHA1、SHA256、SHA384、SHA512四种算法。


披露:我是simple-file-checksum的作者。

hashlib.md5(pathlib.Path('path/to/file').read_bytes()).hexdigest()

在Python 3.11+中,有一个新的可读且内存高效的方法:

import hashlib
with open(path, "rb") as f:
    digest = hashlib.file_digest(f, "md5")
print(digest.hexdigest())