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.
3 Réponses :
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).
La fermeture de fichier ne semble pas être le problème ici.
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.
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
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?