我已经查看了几个关于在Python中计算文件校验和的主题,但没有一个回答有关多个文件中一个总和的问题。我在子目录中有几个文件,并想确定其中一个或多个是否有任何更改。 有没有办法从多个文件生成一个总和?
编辑: 这是我获取总和列表的方式:
checksums = [(fname, hashlib.md5(open(fname, 'rb').read()).digest()) for fname in flist]
答案 0 :(得分:2)
所以我做到了:)这样就为文件列表生成了一个哈希值。
hash_obj = hashlib.md5(open(flist[0], 'rb').read())
for fname in flist[1:]:
hash_obj.update(open(fname, 'rb').read())
checksum = hash_obj.digest()
感谢PM 2Ring的输入!
请注意,md5已被破解,因此仅将其用于非安全性关键用途。
答案 1 :(得分:2)
比Artur的回答略干净。无需特别对待第一个元素。
def calculate_checksum(filenames):
hash = hashlib.md5()
for fn in filenames:
if os.path.isfile(fn):
hash.update(open(fn, "rb").read())
return hash.digest()
(您可以根据需要删除os.path.isfile()
。)