Python: как правильно обработать сжатый JSON? - PullRequest
3 голосов
/ 10 октября 2011

Я нашел этот фрагмент , который, кажется, выполняет свою работу, но я не могу понять, почему он использует StringIO. Разве f уже не похож на файл? Зачем нужно его читать, а потом снова сделать его похожим на файл, только чтобы снова его прочитать? Я протестировал его (ну, слегка измененную версию), и он не работает без StringIO.

Ответы [ 3 ]

1 голос
/ 11 октября 2011

Кажется, что это ошибка в стандартной библиотеке Python, которая исправлена ​​в Python 3.2.
см http://www.enricozini.org/2011/cazzeggio/python-gzip/

Файловые объекты

urllib и urllib2 не предоставляют метод tell() по запросу gzip.

1 голос
/ 11 октября 2011

Возможно, для кода gunzip необходим файлоподобный объект, который имеет метод seek, который библиотека HTTP вряд ли предоставит. Что значит "не работает"? Сообщение об ошибке?

Если эффективность - ваша реальная проблема, немного измените код, чтобы он использовал cStringIO, а не StringIO.

0 голосов
/ 10 октября 2011

То, как я читаю соответствующую часть кода, гласит:

  • Открыть URL
  • Загрузить его полностью в память (с помощью метода read)
  • Хранить содержимое в объекте StringIO, чтобы оно было доступно в виде файлового объекта
  • Выполнить с ним gzip и json.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...