擅长:python、mysql、java
<p>由于您主要关注zip文件中存储的文件的元数据和散列,而不是文件本身,因此无需将文件解压缩到文件系统</p>
<p>相反,您可以使用<code>ZipFile.open()</code>方法通过类似文件的对象访问文件的内容。可以使用每个文件的<code>ZipInfo</code>对象收集元数据。下面是一个示例,它获取文件名和文件大小作为元数据,以及文件的哈希值</p>
<pre><code>import hashlib
import zipfile
from collections import namedtuple
def get_files(archive):
FileInfo = namedtuple('FileInfo', ('filename', 'size', 'hash'))
with zipfile.ZipFile(archive) as zf:
for info in zf.infolist():
if not info.filename.endswith('/'): # exclude directories
f = zf.open(info)
hash_ = hashlib.md5(f.read()).hexdigest()
yield FileInfo(info.filename, info.file_size, hash_)
for f in get_files('some_file.zip'):
print('{}: {} {} bytes'.format(f.hash, f.filename, f.size))
</code></pre>