1
votes

La taille décompressée de Python 3.7 zlib est inférieure à celle de la compression

J'ai écrit un petit code python, qui est censé décompresser un gros fichier binaire d'environ 180 Mo. Le problème est qu'il ne décompresse qu'environ 50 Mo. Je me demande si quelqu'un a déjà rencontré un problème similaire et étrange comme celui-ci et trouvé une solution.

import zlib, sys
text = open('REG_E.rzp','rb').read()
print(sys.getsizeof(text))
# 187424785


decompressed = zlib.decompress(text)
print(sys.getsizeof(decompressed))
# 50001

Informations supplémentaires: les premiers 50 Mo décompressés sont corrects et lisibles dans l'éditeur hexadécimal. Alors je me demande, y a-t-il une limite, sur combien de zlib peut décompresser à la fois? Je ne reçois aucun message d'erreur, donc je suis un peu dans le noir avec ça.


2 commentaires

Je soupçonne que le fichier a été corrompu. Pouvez-vous le décompresser avec l'utilitaire de ligne de commande normal (pas python)? Décompresse-t-il toujours à 50 Mo?


Savez-vous quel format de compression il utilise? Quel programme a été utilisé pour créer l'archive en premier lieu?


3 Réponses :


2
votes

Il semble que vous ne fermiez pas correctement vos fichiers, donc les fichiers ne sont peut-être pas entièrement écrits dans:

import zlib, sys
with open('REG_E.rzp','rb') as f:
    text = f.read()
    print(sys.getsizeof(text))

decompressed = zlib.decompress(text)
print(sys.getsizeof(decompressed))

with open('cecomp.bin','wb') as f:
    f.write(decompressed)

recomp = zlib.compress(decompressed)
print(sys.getsizeof(recomp))
with open('recomp.bin','wb') as f:
    f.write(recomp)

Ajout des blocs avec garantit que vous fermez les fichiers (ce qui garantit également que vous avez effectivement terminé d'écrire sur le disque).


1 commentaires

La fermeture de fichier ne semble pas être le problème ici.



0
votes

D'après l'extension de fichier, il semble qu'il ait pu être compressé avec rzip , pas avec gzip. Rzip utilise bzip2, pas DEFLATE de zlib. Le module zlib de Python ne peut probablement pas lire ce format.


0 commentaires

0
votes

Problème résolu. L'archive est composée de plusieurs fichiers compressés et doit être décompressée fichier par fichier. Dans l'image, vous pouvez voir le fichier recompressé et l'original. La ligne est remplie de zéros, avant l'en-tête zlib suivant: 78 DA

entrez la description de l'image ici


0 commentaires