Python利用hashlib实现文件MD5码的批量存储
作者:winfredzhang 发布时间:2021-12-20 20:48:02
简介
可以考虑以下几个可能的应用:
如果你需要对文件进行校验或验证,你可以使用MD5码来检查文件是否被篡改或损坏。
如果你需要对文件进行分类或去重,你可以使用MD5码来标识文件的唯一性或相似性。
如果你需要对文件进行存储或传输,你可以使用Access数据库来管理文件的路径和MD5码。
基于这些应用,我为你举了以下几个具体的场景:
你是一个软件开发者,你需要发布一个安装包给用户下载。为了保证安装包的完整性和安全性,你可以使用刚刚一段代码来生成安装包的MD5码,并将其存储在Access数据库中。当用户下载完安装包后,他们可以通过比较自己计算的MD5码和数据库中的MD5码来确认安装包是否正确无误。
你是一个数据分析师,你需要处理大量的数据文件。为了避免重复或错误的数据文件,你可以使用刚刚一段代码来生成每个数据文件的MD5码,并将其存储在Access数据库中。当你需要查询或分析某个数据文件时,你可以通过查找数据库中的MD5码来快速定位到相应的数据文件。
你是一个网络管理员,你需要备份服务器上的重要文件。为了节省空间和时间,你可以使用刚刚一段代码来生成每个重要文件的MD5码,并将其存储在Access数据库中。当你需要恢复某个重要文件时,你可以通过比较服务器上和备份设备上的MD5码来确定哪些文件需要更新或覆盖。
源代码
import os
import hashlib
import pyodbc
# Connect to the Access database
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=./stocks.accdb;')
# conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=stocks.accdb;')
cursor = conn.cursor()
# Iterate over all files in the current folder
for file in os.listdir("."):
# Skip subdirectories
if os.path.isdir(file):
continue
# Get the full file path
file_path = os.path.abspath(file)
# Generate the md5 hash of the file content
md5_hash = hashlib.md5()
with open(file_path, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
md5_hash.update(chunk)
md5_hex = md5_hash.hexdigest()
# Insert the file path and md5 hash into the database table
cursor.execute("INSERT INTO filemd (filepath, md5) VALUES (?, ?)", (file_path, md5_hex))
# Commit and close the connection
conn.commit()
conn.close()
源代码说明
这段代码的主要功能是遍历当前文件夹下的所有文件,计算每个文件的MD5码,并将文件路径和MD5码存储在Access数据库中。具体来说,这段代码做了以下几件事:
导入os、hashlib和pyodbc三个模块,分别用于操作系统、哈希算法和数据库连接。
使用pyodbc.connect函数连接到Access数据库,指定驱动程序和数据库文件名。
创建一个cursor对象,用于执行SQL语句。
使用os.listdir函数获取当前文件夹下的所有文件名。
使用一个for循环遍历每个文件名。
使用os.path.isdir函数判断是否是子目录,如果是则跳过。
使用os.path.abspath函数获取完整的文件路径。
创建一个md5_hash对象,用于生成MD5码。
使用open函数以二进制模式打开文件,并使用一个for循环读取每个4096字节的数据块。
使用md5_hash.update函数更新MD5码的计算状态。
使用md5_hash.hexdigest函数获取最终的MD5码值(十六进制字符串)。
使用cursor.execute函数执行SQL语句,将文件路径和MD5码插入到filemd表中(如果表不存在,则先创建)。
使用conn.commit函数提交事务,将数据保存到数据库中。
使用conn.close函数关闭数据库连接。
效果如下所示
来源:https://blog.csdn.net/winniezhang/article/details/129642561
猜你喜欢
- 前端技术层(图片有点偏激,仅供参考)Javascript和DOM关系很暧昧,弄不明白!CSS和HTML
- 一.python读取txt文件最简单的open函数:# -*- coding: utf-8 -*-with open("test.
- 别误会,IE是不支持CSS3高级选择器,包括最新的IE8(详见《CSS选择器的浏览器支持》),但是CSS选择器的确是很有用的,它可以大大的简
- 数据归一化是深度学习数据预处理中非常关键的步骤,可以起到统一量纲,防止小数据被吞噬的作用。一:归一化的概念归一化就是把所有数据都转化成[0,
- getpass模块的使用:在python中实现密码密文需要导入getpass模块,在python中要使用内置模块的话,需要使用import进
- 本文实例讲述了Python flask框架post接口调用。分享给大家供大家参考,具体如下:from flask import Flask,
- f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化
- Microsoft JET Database Engine 错误 '80040e2
- 这个问题让我查了许多天才解决,为了避免后面的人重复走弯路,记录下来。问题描述:我在ubuntu 下编译安装了caffe ,在命令行模式下可以
- 为了更好的理解邮件发送功能的实现,要先了解邮件发送系统的大致流程。首先 电子邮件之间的相互发送接受就像 邮局邮件发送
- 第一种情况os.system('ps aux')执行系统命令,没有返回值第二种情况result = os.popen(
- 创建新的项目django-admin.py startproject my_project创建新的App# 在Django项目(my_pro
- 前言在c++中参数传递有两种形式:值传递和引用传递。这两种方式的区别我不在此说,自行补上,如果你不知道的话。我先上python代码,看完我们
- 一、正则1.正则表达式定义正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一
- 刚刚接触爬虫,基础的东西得时时回顾才行,这么全面的帖子无论如何也得厚着脸皮转过来啊!什么是 Urllib 库?urllib 库 是 Pyth
- 依赖环境本篇文章所依赖的python 环境如下:计算机网络应用体系结构,一般有以下几种:C/S架构: 也称为客户端/客户端架构。P2P架构:
- 正常使用了go 1.8一段时间没有发现异常,为了发布便捷,以及后期引入plug-in,开始将大项目分解。涉及到通过vendor引入私有库保存
- 自己写的一个自动完成效果,暂时没有ajax数据源,用静态数据代替。仅供喜欢JavaScript的同学们参考,代码如下<!DOCTYPE
- 一:文字加粗 倾斜的代码文字加粗的代码是: <b>你好</b>文字倾斜的代码是: <i>你好!</
- 一、贝叶斯分类介绍贝叶斯分类器是一个统计分类器。它们能够预测类别所属的概率,如:一个数据对象属于某个类别的概率。贝叶斯分类器是基于贝叶斯定理