Ответ 1
Вам нужно seek
вернуться к началу файла после записи начального файла в памяти...
myio.seek(0)
Мне хотелось попробовать класс BytesIO python.
В качестве эксперимента я попытался записать в zip файл в памяти, а затем прочитать байты обратно из этого zip файла. Поэтому вместо передачи в файле-объекте gzip
я передаю объект BytesIO
. Вот весь script:
from io import BytesIO
import gzip
# write bytes to zip file in memory
myio = BytesIO()
g = gzip.GzipFile(fileobj=myio, mode='wb')
g.write(b"does it work")
g.close()
# read bytes from zip file in memory
g = gzip.GzipFile(fileobj=myio, mode='rb')
result = g.read()
g.close()
print(result)
Но он возвращает пустой объект bytes
для result
. Это происходит как в Python 2.7, так и в 3.4. Что мне не хватает?
Вам нужно seek
вернуться к началу файла после записи начального файла в памяти...
myio.seek(0)
Как насчет того, чтобы написать и прочитать содержимое gzip в том же контексте, как это? Если этот подход хорош и работает для всех, кто читает это, пожалуйста, +1 за этот ответ, чтобы я знал этот подход правильно и работал для других людей?
#!/usr/bin/env python
from io import BytesIO
import gzip
content = b"does it work"
# write bytes to zip file in memory
gzipped_content = None
with BytesIO() as myio:
with gzip.GzipFile(fileobj=myio, mode='wb') as g:
g.write(content)
g.close()
gzipped_content = myio.getvalue()
print(gzipped_content)
print(content == gzip.decompress(gzipped_content))