Rah*_*aki 5 python compression zip amazon-s3
有没有办法对单文件 zip 档案进行流式解压?
我目前在 s3 中有任意大的压缩档案(每个档案一个文件)。我希望能够通过遍历文件来处理文件,而不必将文件实际下载到磁盘或内存中。
一个简单的例子:
import boto
def count_newlines(bucket_name, key_name):
conn = boto.connect_s3()
b = conn.get_bucket(bucket_name)
# key is a .zip file
key = b.get_key(key_name)
count = 0
for chunk in key:
# How should decompress happen?
count += decompress(chunk).count('\n')
return count
Run Code Online (Sandbox Code Playgroud)
这个答案演示了一种对 gzip 文件做同样事情的方法。不幸的是,我无法使用该zipfile模块获得相同的技术,因为它似乎需要对正在解压缩的整个文件进行随机访问。
小智 1
zip 标头位于文件末尾,这就是它需要随机访问的原因。请参阅https://en.wikipedia.org/wiki/Zip_(file_format)#Structure。
您可以解析本地文件头,该文件头应位于简单 zip 文件的开头,并使用解压缩字节zlib(请参阅zipfile.py)。这不是读取 zip 文件的有效方法,虽然它可能适用于您的特定场景,但它也可能在许多有效的 zip 上失败。读取中央目录文件头是读取 zip 的唯一正确方法。
| 归档时间: |
|
| 查看次数: |
3469 次 |
| 最近记录: |