【发布时间】:2016-08-06 15:46:31
【问题描述】:
我有一个函数可以计算驱动器中所有文件的 md5 哈希值。计算了一个哈希值,但它与我使用其他程序或为此设计的在线服务获得的哈希值不同。
def md5_files(path, blocksize = 2**20):
hasher = hashlib.md5()
hashes = {}
for root, dirs, files in os.walk(path):
for file in files:
file_path = os.path.join(root, file)
print(file_path)
with open(file_path, "rb") as f:
data = f.read(blocksize)
if not data:
break
hasher.update(data)
hashes[file_path] = hasher.hexdigest()
return hashes
提供的path 是驱动器号,例如“K:\”然后我浏览文件并打开文件进行二进制读取。我读取了blocksize 中指定大小的数据块。然后我将每个文件的文件名和 md5 哈希值存储在一个名为 hashes 的字典中。代码看起来不错,我还检查了 Stack Overflow 上的其他问题。不知道为什么生成的md5 hash是错误的。
【问题讨论】:
-
您需要为每个文件创建一个新的
hasher。 -
我可以重复使用同一个变量吗?例如,我可以将“hasher = hashlib.md5()”放在内部循环中吗?我的意思是,在“with”语句中