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
猜你喜欢
- 本文主要讲述:自定义树形控件<el-tree>需求说明:Element UI 官网提供的树形控件包含基础的、可选择的、自定义节点
- 一、使用全局变量保存单例这是最简单的实现方法function Person(){ this.createTime=new Da
- 一、前言在程序中,有很多高效率的字符串处理方式,如果开发者能够完全掌握这些高效的字符串处理,往往在开发者也能事半功倍。比如针对于字符串的处理
- 本文实例讲述了Python实现发送与接收邮件的方法。分享给大家供大家参考,具体如下:一、发送邮件这里实现给网易邮箱发送邮件功能:import
- 1.echo和print的区别PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的。echo输出后没有返回值,但
- 在实际工作中,有时候需要对判断字符串是否为合法的json格式解决方法使用json.loads,这样更加符合‘Pythonic'写法代
- 这两天准备复习一下java,所以写一个采用dubbo的商场项目练练手,却卡第一个测试上,启动provider服务和Consumer服务,请求
- 前言JS 中 GBK 编码转字符串是非常简单的,直接调用 TextDecoder 即可:const gbkBuf = n
- 当然还是要使用FileSystemObject(FSO)来创建了。不过在创建前,要先检查以下目录是否存在,如果存在,就不用创建了:
- 本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下。PyQt5已经自动定义了很多QT内建的信号。但是在实际的使用中为了灵活
- 前言本文实现一个 Python 脚本,用来批量卸载模拟器或者实体机上面的 App 以及清除 LogCat 缓存。开发 Android 的朋友
- 版本选择因为MySql的版本越来越多,而作为中小网站者可能没有足够的经济去购买商业版本,所以一般选择免费版,而且功能也是足够使用的。有钱任性
- 本文实例为大家分享了JS实现canvas简单小画板的具体代码,供大家参考,具体内容如下Html部分:<!DOCTYPE html>
- 本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法。分享给大家供大家参考,具体如下:根据 * 的伪代码实现:广度优先
- 我们之前写的代码都没有对前端input框输入的数据做验证,我们今天来看下,如果做form表单的数据的验证在views文件做验证首先用文字描述
- 使用File实现文件上传使用Form表单上传文件,fastapi使用File获取上传的文件。指定了参数类型是bytes:file: byte
- 观察者模式首先,提到观察者模式,这不禁让我想到了MVVM,MVVM架构模式感觉用到了观察者的思想。我们还是按照惯例,了解一下什么是观察者模式
- 目录jiaba库的使用1、jieba库的安装2、统计荷塘月色词频总结jiaba库的使用jieba库是一款优秀的 Python 第三方中文分词
- 之前用python调用API存JSON的时候试用了很多方法,现在调用API直接获取参数的时候也是查了好多例子(毕竟我是一个初学者)。结果让我
- 本文实例为大家分享了mysql 5.7.13 winx64安装配置方法图文教程,供大家参考,具体内容如下(1) 下载MySQL程序,您可以从