python编码gzip字符串

时间:2016-04-25 16:15:09

标签: python encoding gzip

我想要解压缩此字符串  “\ x1F \ x8B \ x08 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00UP] k \ xC3 \ x14 \ xFD + \ xC3 \ xE7 \ xCD \ xA8 \ xF9X \ xE2 \ xEBX \ xA1 \ x0CF \ x1F \ XBA \ XEE%\ X10 \ XAC \ XB1 \ XAD \ xC4h \ x88f%\ x8C \ XFD \ XF7] \ X1B \ XDA \ XAD \ XF8 \ xE29 \ xE7z \ xEE9〜#\ XE7 \ x11G \ XAF \ XBB \ X1C = \ X22 \ xDFv_j \ x04H + @ \ xBAW \ X1A \ xEEe \ X91> SF \ X18 + I \ x9Ef \ X04 \ X84 \ XA1; \ X02 /] \ X8F \ xA5Q \ XC2 \ XF6 \ XC2 \ x075 \ XE2 \ xFE8 \ X89 \ xB1m \ XA4 \ X85 \ x89V \ XFB \ XC1 \ X88 \ X19 \ xA6 \ XDE \ XB6 \ x1Fe \ xB6y \ X08 \ XCA \的x87 \ xA7N \ XCD \ X1E \ XC4 1 H \ X10 \ XF6 \ X19' \ X19 / \ x14g \ x92K \ XC1 [\ X06 \ XCA \ XB2 \ x9Ca \ x82K @ \ x07m \ X8F \ x17B \ X98 \ XC1 \ XD7 \ xC9a2 \ xA6 \ xD9W \ xA4j \ XbaI位\ x9E \ X84 \ XAB \ X93 \ 0x7F部分\ x80g \ x18N \ x9D,\ XEB \ XEA \ x84fyJIAI \ XCE'\ XAF \ XC6:\ xB9 \ X0B \ xE0 \ XF6 \ XDA \ xA8 \ x95qg0 \ x8FE \ x87Ke \ x86iQbZU \ X98 \ x924 \ XD6 \ X1C] \ xC9 \ xB0n \ xA3Jhd \ x8C \ X08 \ XB7 \ XCF \ x1AN \ XCE \ xAA- | R \ X94 \ XB3 \ X82 \ xA6 \ xE0 \ x902v \ X19 \ XB4 * L \ XE7! * \ x9F \ XEB \ XD5 \ X1A \ X88 \ XB3> \ xE8 \ XBF \ X85 \ xC1u \ XCA \ x22n \ XA1 \ X11 \ XA4 \ x99wj | \ X17 \ x8B \ X0F \ 86 \ XF2 \ x8D \ x8C \ xE5 \ X85 \ x0Cn \ x9Co \ xDBt \ XEF \ XF5 \ xF2X \ X1A \ xADlx9 \ x09k \ X95 \ xB9 \ x9A \ xC8 + DTI \ XB0 \ xD116 \ XFA \ xF9 \ X05 \ xBAs \ xAET \ xE0 \ X01 \ X00 \ X00"

这个字符串是通过gzip编码压缩,我想解压缩这个,所以我把这个字符串保存在文件中并读取文件解压缩不起作用,否则我使用python解释器模式并在命令行中粘贴字符串代码是工作

我想这是字符集问题,但我无法解决它!所以我希望有人给我一个解决方案! 我的代码很好,工作环境是linux。

  import zlib

  file_obj=open("compress_data.log","r+")

  for gz_data in file_obj.readlines():

       print gz_data

       decompressed_data = zlib.decompress(gz_data, 16+zlib.MAX_WBITS)

       print decompressed_data

1 个答案:

答案 0 :(得分:1)

该数据采用“gzip”格式。尝试使用Python的内置gzip library

如果该数据的来源是磁盘文件,请尝试:

import gzip

for data in gzip.GzipFile("compress_data.log"):
    print data

如果该数据的来源是Python字符串,请尝试:

import gzip
import StringIO

compressed_data = "\x1F\x8B\x08\x00\x00\x00\x00\x00\x00\x00UP]k\xC3 \x14\xFD+\xC3\xE7\xCD\xA8\xF9X\xE2\xEBX\xA1\x0CF\x1F\xBA\xEE%\x10\xAC\xB1\xAD\xC4h\x88f%\x8C\xFD\xF7]\x1B\xDA\xAD\xF8\xE29\xE7z\xEE9~#\xE7\x11G\xAF\xBB\x1C=\x22\xDFv_j\x04H+@\xBAW\x1A\xEEe\x91>SF\x18+i\x9Ef\x04\x84\xA1;\x02/]\x8F\xA5Q\xC2\xF6\xC2\x075\xE2\xFE8\x89\xB1m\xA4\x85\x89V\xFB\xC1\x88\x19\xA6\xDE\xB6\x1Fe\xB6y\x08\xCA\x87\xA7N\xCD\x1E\xC4^H\x10\xF6\x19'\x19/\x14g\x92K\xC1[\x06\xCA\xB2\x9Ca\x82K@\x07m\x8F\x17B\x98\xC1\xD7\xC9a2\xA6\xD9W\xA4j\xBAI\x9E\x84\xAB\x93\x7F\x80g\x18N\x9D,\xEB\xEA\x84fyJIAI\xCE'\xAF\xC6:\xB9\x0B\xE0\xF6\xDA\xA8\x95qg0\x8FE\x87Ke\x86iQbZU\x98\x924\xD6\x1C];\xC9\xB0n\xA3Jhd\x8C\x08\xB7\xCF\x1AN\xCE\xAA-|R\x94\xB3\x82\xA6\xE0\x902v\x19\xB4*l\xE7!*\x9F\xEB\xD5\x1A\x88\xB3>\xE8\xBF\x85\xC1u\xCA\x22n\xA1\x11\xA4\x99wj|\x17\x8B\x0F\x86\xF2\x8D\x8C\xE5\x85\x0Cn\x9Co\xDBt\xEF\xF5\xF2X\x1A\xADlx9\x09k\x95\xB9\x9A\xC8+DtI\xB0\xD116\xFA\xF9\x05\xBAs\xAET\xE0\x01\x00\x00"

compressed_data = StringIO.StringIO(compressed_data)

for data in gzip.GzipFile(fileobj=compressed_data):
    print data

如果您的数据以带有Python转义序列的ASCII文本存储在磁盘文件中,那么此程序可能适合您:

from gzip import GzipFile
from StringIO import StringIO

with open("compress_data.log") as file_obj:
    gz_data = file_obj.read().rstrip('\n')
unescaped_data = gz_data.decode('string_escape')
decompressed_data = GzipFile(fileobj=StringIO(unescaped_data)).read()
print decompressed_data

注意:如果上述程序适合您,您的数据将采用非感性格式。这可能是程序中产生数据的错误的结果。