Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с gzip 
:(
    Опции темы
Isaev
Дата 14.4.2013, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 8.11.2007
Где: Germany

Репутация: нет
Всего: нет



Доброго времени суток
Получаю данные от сервера, в заголовке
Код

Accept-Encoding:gzip,deflate,sdch

Значит данные приходят в gzip как я понял? (или просто zlib надо использовать?)
данные всегда с сигнатурой "78 DA"(compression extreme) по идее это zlib должен быть... или у gzip тоже такая сигнатура? 
читаю в файл, потом пытаюсь перекодировать. в python чайник
полазил по просторам сети, нашёл что-то типа(python 3): 
Код

import io,gzip

a=open('test.txt','rb')
z=a.read()
a.close()
zbuf = io.StringIO(z)
zfile = gzip.GzipFile(mode='rb', fileobj=zbuf)
zfile.read()
zfile.close()
f=open('out.txt','wb')
f.write(zbuf)
f.close()

но оно не работает (пока), т.к. мало понимаю как работает StringIO вообще и зачем он тут
да и вообще то ли я делаю?

для примера входной файл "78 DA 33 34 32 36 31 35 33 B7 00 00 07 40 01 A5" бинарный конечно
на выходе должна быть строка "12345678"

Это сообщение отредактировал(а) Isaev - 14.4.2013, 09:54
PM MAIL ICQ   Вверх
Isaev
Дата 14.4.2013, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 8.11.2007
Где: Germany

Репутация: нет
Всего: нет



Ребят, ну исправьте глупую ошибочку.... каждый третий наверняка видит, не бойтесь советовать, я попробую ;)
PM MAIL ICQ   Вверх
Backward
Дата 15.4.2013, 04:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.6.2007

Репутация: 2
Всего: 2



Как-то так должно работать
Код

import zlib

def decompress(data, mode="gzip"):
    zlib_mode = 16 + zlib.MAX_WBITS if mode == 'gzip' else -zlib.MAX_WBITS
    dec = zlib.decompressobj(zlib_mode)
    return dec.decompress(data)

with open("test.txt", "rb") as fin, open("out.txt", "wb") as fout:
    fout.write(decompress(fin.read()))

PM MAIL   Вверх
Isaev
Дата 16.4.2013, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 8.11.2007
Где: Germany

Репутация: нет
Всего: нет



Backward, не компилируется немного... а вообще задумка мне нравится
Код

Traceback (most recent call last):
  File "unitest.py", line 8, in <module>
    fout.write(decompress(fin.read()))
  File "unitest.py", line 6, in decompress
    return dec.decompress(data)
zlib.error: Error -3 while decompressing data: incorrect header check


Это сообщение отредактировал(а) Isaev - 16.4.2013, 04:07
PM MAIL ICQ   Вверх
Backward
Дата 17.4.2013, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.6.2007

Репутация: 2
Всего: 2



Для данных, которые Вы привели, работает так:
Код

import zlib
with open("test.txt", "rb") as fin, open("out.txt", "wb") as fout:
    fout.write(zlib.decompress(fin.read()))

PM MAIL   Вверх
Isaev
Дата 17.4.2013, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 8.11.2007
Где: Germany

Репутация: нет
Всего: нет



Backward, благодарю, работает smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0948 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.