通过表格批量比对文件的md5值

查看 81|回复 7
作者:hizlez   


image.png (69.27 KB, 下载次数: 0)
下载附件
szbd
2024-8-15 18:17 上传



image.png (24.88 KB, 下载次数: 0)
下载附件
测试文件
2024-8-15 18:17 上传



image.png (36.42 KB, 下载次数: 0)
下载附件
使用结果
2024-8-15 18:16 上传

[Python] 纯文本查看 复制代码
import hashlib
import openpyxl
import os
def calcmdwu(fp):
    """计算文件的MD5值"""
    h = hashlib.md5()  
    try:
        with open(fp, "rb") as f:  
            for chunk in iter(lambda: f.read(4096), b""):
                h.update(chunk)
    except IOError as e:
        print(f"无法读取文件 {fp}: {e}")
        return None
    return h.hexdigest()
def loadmd5s(ep):
    """加载Excel文件中所有的MD5值"""
    try:
        wb = openpyxl.load_workbook(ep)  
        sh = wb.active  
    except Exception as e:
        print(f"无法读取Excel文件 {ep}: {e}")
        return set()
    md5s3t = set()
    for row in sh.iter_rows(values_only=True):
        md5s3t.update(filter(None, row))  
    return md5s3t
def checkmd5s(dp, ms):
    """对指定目录中的所有文件计算MD5值,并检查是否在MD5集合中"""
    res = {}  
    fls = [
        f for f in os.listdir(dp)
        if os.path.isfile(os.path.join(dp, f)) and not f.startswith('~$')
    ]  
    for f in fls:
        fp = os.path.join(dp, f)  
        mv = calcmdwu(fp)  
        if not mv:
            continue
        res[f] = {
            'md5': mv,
            'ixl': mv in ms  
        }
    return res
def main():
    dp = 'C:/Users/Administrator/Desktop/文件夹'
    ep = 'C:/Users/Administrator/Desktop/有MD5值的表格文件.xlsx'  
    ms = loadmd5s(ep)
    if not ms:
        print("未能从Excel文件中加载到任何MD5值,请检查文件路径或文件情况")
        return
    res = checkmd5s(dp, ms)
    for f, info in res.items():  
        if info['ixl']:
            print(f"\033[92m文件 '{f}' 的MD5值 {info['md5']} 在Excel文件中找到。\033[0m")  # 有颜色提示
        else:
            print(f"文件 '{f}' 的MD5值 {info['md5']} 在Excel文件中未找到。")
if __name__ == "__main__":
    main()

文件, 下载次数

huaxiaotian   

如果是xls文件呢
Wapj_Wolf   

我GET到了,谢谢分享。
gujunhk   

md5值相同的文件已经可以碰撞产生了,可能sha256更保险一些。
zk1126853389   

我GET到了,谢谢分享
yuanhc   

我GET到了,谢谢分享
hizlez
OP
  


huaxiaotian 发表于 2024-8-15 23:40
如果是xls文件呢

xls文件不行
openpyxl库只能读xlsx文件
加入xlrd库就可以了
还有后缀的匹配
hizlez
OP
  


gujunhk 发表于 2024-8-16 07:30
md5值相同的文件已经可以碰撞产生了,可能sha256更保险一些。

确实
感谢大佬提醒
您需要登录后才可以回帖 登录 | 立即注册

返回顶部