文件批量校验指对指定目录下的多个文件计算哈希摘要,通过比对摘要确认文件内容未被修改或损坏。Python标准库中的hashlib和os模块足以实现稳定高效的完整性解析,无需第三方依赖。

为什么需要文件完整性校验
当文件在网络传输、磁盘拷贝或长期存储后,可能发生比特翻转、截断或被恶意替换。通过对原始文件和待检文件分别生成哈希值,若两者一致则可认为内容完整。批量处理能将人工操作转为自动任务。
核心实现思路
基本流程包含三个步骤:遍历目标路径获取文件列表,逐文件分块计算哈希,收集结果并输出比对。分块读取可避免大文件占用过多内存。
使用os.walk遍历目录
通过os.walk递归获取目录下所有普通文件路径,排除子目录本身。
哈希计算函数
下面示例以sha256为例,定义可复用的校验函数:
import hashlib
import os
def calc_file_hash(filepath, algo='sha256', block_size=8192):
# 创建哈希对象
h = hashlib.new(algo)
with open(filepath, 'rb') as f:
# 分块读取,适合大文件
while True:
chunk = f.read(block_size)
if not chunk:
break
h.update(chunk)
return h.hexdigest()
# 批量校验目录
def batch_check(root_dir):
result = {}
for dirpath, dirnames, filenames in os.walk(root_dir):
for name in filenames:
full = os.path.join(dirpath, name)
result[full] = calc_file_hash(full)
return result
if __name__ == '__main__':
files = batch_check('./data')
for path, digest in files.items():
print(path, digest)
解析与比对结果
将计算出的摘要与可信源提供的摘要表对比,可快速定位异常文件。可用字典存储预期值,在校验后标记不匹配项。
示例比对逻辑
# expected为路径到摘要的映射
expected = {
'./data/a.txt': '2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae',
'./data/b.txt': 'fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9'
}
actual = batch_check('./data')
for path, digest in actual.items():
if expected.get(path) != digest:
print('校验失败:', path)
else:
print('正常:', path)
注意事项
- 哈希算法根据安全需求选择,md5已不适合安全场景,推荐sha256。
- 符号链接可能引发重复计算,可用
os.path.islink过滤。 - 批量任务建议增加日志记录,便于追踪历史校验状态。
通过上述方法,我们可以用简短的Python代码构建稳定的文件批量校验与完整性解析工具,轻松应对日常文件质量保障工作。