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()
|