You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.9循环计算多文件SHA1哈希:后续文件结果异常求助

问题:批量计算文件SHA1哈希时,第二个及以后文件结果错误

现象

  • 单独执行代码计算单个文件SHA1:结果正确,与sha1sum命令输出一致
  • 单次执行代码批量计算多个文件:第二个及以后文件的哈希值错误,和单独计算的结果不符

错误原因

原代码中hash_obj = hashlib.sha1()定义在循环外部,hash_obj.update()方法会累积更新哈希计算状态——第二个文件的哈希是基于第一个文件的哈希结果,再累加当前文件内容计算出来的,并非单独计算当前文件的SHA1值。

修复后的代码

import glob
import hashlib
import os

path = input("请提供要搜索的路径(会包含子目录):")
filepattern = input("请提供文件匹配模式,例如 *.jar、*abc*.jar:")
assert os.path.exists(path), "未找到路径:" + str(path)
path = path.rstrip("/")
tocheck = f'{path}/**/{filepattern}'

searched_file_list = glob.iglob(tocheck, recursive=True)
for file in searched_file_list:
    print(f'{file}')
    try:
        # 每次处理新文件时,重新初始化SHA1哈希对象
        hash_obj = hashlib.sha1()
        with open(file, 'rb') as file_for_sha1:
            hash_obj.update(file_for_sha1.read())
            checksum = hash_obj.hexdigest()
            print(f'文件({file})的SHA1值= {checksum}')
    except Exception as e:
        print(f'处理文件{file}时出错:{e}')

注:改用with语句自动管理文件句柄,无需手动调用close(),代码更简洁安全

验证结果

修改后单次批量计算两个相同内容的文件,输出的SHA1值与sha1sum命令结果一致:

文件(/home/test/git/reader/cabin/abc.txt)的SHA1值= fc4db67f46711b2c18bd133abd67965649edfffc
文件(/home/test/git/reader/check/cabin/abc.txt)的SHA1值= fc4db67f46711b2c18bd133abd67965649edfffc

内容的提问来源于stack exchange,提问作者bsethi24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:36:04