Заархивируйте файл в память и прочитайте весь архив как байты Python - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь сжать XML-файл, а затем прочитать архив в байтах.В настоящее время я делаю это, сохраняя zip-файл на диск и читая его обратно следующим образом:

zipfile.ZipFile('x.zip', mode='w').write('x.xml')
with open('x.zip', "rb") as f:
    bytes = f.read()

Тем не менее, сам zip-файл мне не требуется, поэтому хранение его на диске - пустая трата времени.Мне также нужно, чтобы zip-архив имел то же имя, что и файл.Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вместо того, чтобы звонить ZipFile.write(), звоните ZipFile.writestr().Если я что-то упустил, я думаю, что это будет делать то, что вы хотите.

0 голосов
/ 29 января 2019

ZipFile первый аргумент может быть либо путем к файлу, либо файлом, подобным файлу.

Вы можете передать буфер в памяти как

from io import BytesIO
buffer = BytesIO()
zipfile.ZipFile(buffer, mode='w').write('README.md')
buffer.seek(0)

И использовать buffer как файл, открытый в режиме b

...