Есть ли способ сделать потоковое декомпрессии однофайловых архивов?Потоковая декомпрессия zip-архивов в python
В настоящее время в 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
This answer демонстрирует способ делать то же самое с файлами упакованных gzip. К сожалению, мне не удалось получить тот же метод для работы с использованием модуля zipfile
, так как для него требуется случайный доступ к распакованному файлу.
Вы пытались адаптировать этот код, чтобы использовать [ 'zipfile'] (https://docs.python.org/2/library/zipfile.html) вместо' zlib'? – MattDMo
Да! ZipFile ожидает случайный доступ к файлу, который он распаковывает, поэтому я не думаю, что он действительно будет работать с итератором s3. –
См. Также https://stackoverflow.com/questions/10405210/create-and-stream-a- large-archive-without-storing-it-in-memory-or-on-disk – DNA