Если у меня есть содержимое zip-файла в строке Python, могу ли я распаковать его без записи в файл? - PullRequest
16 голосов
/ 21 августа 2009

Я написал некоторый код Python, который извлекает zip-файл из Интернета в строку:

In [1]: zip_contents[0:5]
Out[1]: 'PK\x03\x04\x14'

Я вижу, что есть библиотека zipfile, но у меня возникают проблемы с поиском функции, в которой я могу просто передать несколько необработанных данных zip. Кажется, хочет прочитать его из файла.

Мне действительно нужно выгрузить это во временный файл, или есть способ обойти это?

Ответы [ 2 ]

32 голосов
/ 21 августа 2009

zipfile.ZipFile принимает любой файлоподобный объект, поэтому вы можете использовать StringIO (2.x) или BytesIO (3.x):

try:
  from cStringIO import StringIO
except:
  from StringIO import StringIO
import zipfile

fp = StringIO('PK\x03\x04\x14')
zfp = zipfile.ZipFile(fp, "r")
6 голосов
/ 21 августа 2009

Оберните вашу строку в объект cStringIO . Он выглядит, действует и крякает как файловый объект, но находится в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...