import hashlib
def file_hash(file_path):
"""计算文件的MD5哈希值"""
sha256 = hashlib.md5()
with open(file_path, 'rb') as f:
while True:
data = f.read(1024)
if not data:
break
sha256.update(data)
return sha256.hexdigest()
result=file_hash(r'D:\pycharm-Work\web_study\py_25day_project\Ademo\草稿本.py')
print(result)
按1024字节读取文件来计算文件的MD5哈希值;
也可以通过文件大小来分段读取文件,再计算文件MD5哈希值;
两种计算文件大小的方式:
# 1.通过getsize获取文件大小
import os
file=r'D:\pycharm-Work\web_study\py_25day_project\Ademo\草稿本.py'
res=os.path.getsize(file)
print(res)
# 2.通过seek()获取文件大小
with open(file,mode='rb') as f:
t=f.seek(0,2)
print(t)
通过getsize获取文件大小,分成10段进行读取文件,再计算文件MD5哈希值
import os
import hashlib
def file_hash(file_path):
"""计算文件的MD5哈希值"""
sha256 = hashlib.md5()
with open(file_path, 'rb') as f:
file_size = os.path.getsize(file_path)
# 每次读取的块大小为文件大小的1/10
block_size = file_size // 10
while True:
data = f.read(block_size)
if not data:
break
sha256.update(data)
return sha256.hexdigest()
result=file_hash(r'D:\pycharm-Work\web_study\py_25day_project\Ademo\草稿本.py')
print(result)
需要注意的是:按照不同的块大小读取文件,可能会对哈希值产生影响。以按 1024 字节读取文件和按 1/10 文件大小读取文件为例,假设文件大小为 10000 字节,那么按照这两种方式读取的块大小分别为 1024 字节和 1000 字节。这样,按照不同的方式读取的块数就不同,可能导致最后计算哈希值时,读入的数据不同,从而导致哈希值不同。 因此,在实际应用中,可以根据文件大小和系统资源等因素,选择一个合适的块大小,来确保计算哈希值时保持一致。