我想要创建一个MD5哈希的ZipFile,而不是其中的一个文件。然而,ZipFile对象并不容易转换为流。
from hashlib import md5
from zipfile import ZipFile
zipped = ZipFile(r'/Foo/Bar/Filename.zip')
hasher = md5()
hasher.update(zipped)
return hasher.hexdigest()上面的代码生成错误:TypeError: must be convertible to a buffer, not ZipFile。
是否有一种简单的方法可以将ZipFile转换为流?
这里没有安全问题,我只需要一种简单的快速方法来确定我以前是否见过文件。hash(zipped)工作得很好,但如果可能的话,我想要一些更健壮的东西。
发布于 2016-09-01 16:20:52
这个函数应该返回任何文件的MD5散列,只要它的路径(需要pycrypto模块):
from Crypto.Hash import MD5
def get_MD5(file_path):
chunk_size = 8192
h = MD5.new()
with open(file_path, 'rb') as f:
while True:
chunk = f.read(chunk_size)
if len(chunk):
h.update(chunk)
else:
break
return h.hexdigest()
print get_MD5('pics.zip') # example输出:
6a690fa3e5b34e30be0e7f4216544365发布于 2016-09-01 16:21:01
只需将ZipFile作为常规文件打开即可。下面的代码在我的机器上工作。
from hashlib import md5
m = md5()
with open("/Foo/Bar/Filename.zip", "rb") as f:
data = f.read() #read file in chunk and call update on each chunk if file is large.
m.update(data)
print m.hexdigest()https://stackoverflow.com/questions/39276248
复制相似问题