我想创建ZipFile
的MD5哈希,而不是其中的一个文件。但是,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)
效果很好,但如果可能,我会更喜欢更健壮的东西。
答案 0 :(得分:6)
只需将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()
答案 1 :(得分:3)
此函数应返回任何文件的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