python support 64 - zlib.error: errore -3 durante la decompressione: controllo dell'intestazione errato




3 Answers

Aggiornamento : la risposta di dnozay spiega il problema e dovrebbe essere la risposta accettata.

Prova il modulo gzip , il codice qui sotto è direttamente dai documenti python .

import gzip
f = gzip.open('/home/joe/file.txt.gz', 'rb')
file_content = f.read()
f.close()
bit windows

Ho un file gzip e sto cercando di leggerlo tramite Python come di seguito:

import zlib

do = zlib.decompressobj(16+zlib.MAX_WBITS)
fh = open('abc.gz', 'rb')
cdata = fh.read()
fh.close()
data = do.decompress(cdata)

genera questo errore:

zlib.error: Error -3 while decompressing: incorrect header check

Come posso superarlo?




Ho appena risolto il problema di "verifica dell'intestazione errata" durante la decompressione dei dati compressi con gzip.

È necessario impostare -WindowBits => WANT_GZIP nella chiamata a inflateInit2 (utilizzare la versione 2)

Sì, questo può essere molto frustrante. Una lettura tipicamente superficiale della documentazione presenta Zlib come un'API alla compressione Gzip, ma per impostazione predefinita (non usando i metodi gz *) non crea né decomprime il formato Gzip. Devi inviare questa bandiera non molto prominente.




Il mio caso era di decomprimere i messaggi di posta elettronica memorizzati nel database di Bullhorn. Lo snippet è il seguente:

import pyodbc
import zlib

cn = pyodbc.connect('connection string')
cursor = cn.cursor()
cursor.execute('SELECT TOP(1) userMessageID, commentsCompressed FROM BULLHORN1.BH_UserMessage WHERE DATALENGTH(commentsCompressed) > 0 ')



 for msg in cursor.fetchall():
    #magic in the second parameter, use negative value for deflate format
    decompressedMessageBody = zlib.decompress(bytes(msg.commentsCompressed), -zlib.MAX_WBITS)



Related