Как в Python работать с zip архивом в памяти, не используя диск?

Раз в минуту получаю по http zip архив. Открываю его, там 8 текстовых файлов, записываю их на диск и далее с ними работаю.

Использую вот такой код:
responce = requests.get(url)
if responce.status_code == 200:
    zf = zipfile.ZipFile(io.BytesIO(responce.content))
    zf.extractall(DIR_NAME)
    return True


Всё работает отлично, но что-то вот задумался: А зачем я разархивирую этот зип и пишу полученные файлы на диск? Сами файлы мне не нужны, а нужна только некоторая информация из них. Соответственно как мне разархивировать этот зип в памяти так чтобы я получил все эти 8 текстовых файлов тоже сразу в памяти и мог сдесь же в памяти с ними работать ?
  • Вопрос задан
  • 550 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
content = {name: zf.read(name) for name in zf.namelist()}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Desead
@Desead Автор вопроса
Всё оказалось проще чем думал. Сделал так: (на самом деле тоже самое как и подсказали выше):

files = {}
responce = requests.get(url)

with zipfile.ZipFile(io.BytesIO(responce.content), 'r') as zf:
    file_name = zf.namelist()
    for i in file_name:
        files[i] = []
        with zf.open(i) as f:
            for j in f.readlines():
                files[i].append(j.rstrip().decode('cp1251'))


в итоге получил словарик с полным содержимым каждого файла.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы