2011-03-16 9 views
7

¿Cuál es la forma más rápida en que python determina si una cadena fue comprimida por zlib? Estoy usando esto actualmente.cómo detectar rápidamente si una cadena está comprimida zlib?

def iscompressed(data): 
    result = True 
    try: 
     s =zlib.decompress(data) 
    except: 
     result = False 
    return result 

Estoy seguro de que hay una manera más elegante.

+3

no siempre utilizar un 'desnudos excepto:' - le conseguirá resultados falsos. use 'excepto zlib.error:' para capturar el error correcto. – nosklo

+0

Buena sugerencia. Gracias. – LouisChiffre

Respuesta

10

Puede verifique los primeros 2 bytes para la información del encabezado; sin embargo, no es 100% seguro.

Ver http://www.faqs.org/rfcs/rfc1950.html, capítulo 2.2

+0

gracias, ¿cómo recupero bytes de una cadena de python? – LouisChiffre

+0

Puede usar 'ord()' en un solo carácter (por ejemplo, 'ord (su_str [0])') para obtener el valor entero de ese carácter ascii. Luego puede usar operadores bit a bit ('&', '|', '^') para verificar bits específicos. – Amber

+0

Gracias. Funciona. – LouisChiffre

2

Mientras que la única manera de estar 100% seguro es tratar realidad para descomprimirlo, se puede hacer una suposición razonable buscando el método de compresión zlib + indicadores de encabezado trozos:

http://www.faqs.org/rfcs/rfc1950.html

Cuestiones relacionadas