吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 670|回复: 6
收起左侧

[Python 原创] 通过表格批量比对文件的md5值

[复制链接]
hizlez 发表于 2024-8-15 18:18

szbd

szbd

测试文件

测试文件

使用结果

使用结果
[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()

免费评分

参与人数 3吾爱币 +8 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yxs997997 + 1 + 1 用心讨论,共获提升!
Liu1011031X + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

huaxiaotian 发表于 2024-8-15 23:40
如果是xls文件呢
Wapj_Wolf 发表于 2024-8-16 07:26
gujunhk 发表于 2024-8-16 07:30
md5值相同的文件已经可以碰撞产生了,可能sha256更保险一些。
yuanhc 发表于 2024-8-16 09:59
我GET到了,谢谢分享
 楼主| hizlez 发表于 2024-8-16 19:57

xls文件不行
openpyxl库只能读xlsx文件
加入xlrd库就可以了
还有后缀的匹配
 楼主| hizlez 发表于 2024-8-16 19:58
gujunhk 发表于 2024-8-16 07:30
md5值相同的文件已经可以碰撞产生了,可能sha256更保险一些。

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

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 11:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表