ich eine Reihe von Zeichenfolge in einer Liste mit dem Namen ‚Linien‘ und I komprimiere sie wie folgt:Python bz2 sequenzieller Kompressor erzeugt ungültigen Datenstrom auf niedrigen Komprimierungsstufen
import bz2
compressor = bz2.BZ2Compressor(compressionLevel)
for l in lines:
compressor.compress(l)
compressedData = compressor.flush()
decompressedData = bz2.decompress(compressedData)
Wenn compression ist auf 8 oder 9 das funktioniert gut. Wenn es eine Zahl zwischen 1 und 7 (einschließlich) gibt, schlägt die letzte Zeile mit einem ungültigen Datenstrom IOError fehl. Das gleiche passiert, wenn ich den sequentiellen Dekompressor verwende. Allerdings, wenn ich die Saiten in einer langen Kette und verwenden Sie den One-Shot-Kompressor-Funktion anschließen, funktioniert es gut:
import bz2
compressedData = bz2.compress("\n".join(lines))
decompressedData = bz2.decompress(compressedData)
# Works perfectly
Wissen Sie, warum dies wäre und wie man es bei niedrigeren Kompressionsstufen funktioniert?
Ah, ich verstehe. Ich hatte die Tatsache übersehen, dass die Komprimierungsfunktion Teilergebnisse anstatt alle auf einmal bei flush() zurückgibt. Interessant, dass der compressionLevel von 8 oder 9 nie zu dem Punkt kommt, dass das Teilergebnis bereit ist - dieser Unterschied ist vielleicht nicht einmal aufgetaucht, wenn ich auf einem anderen Satz von Dokumenten getestet habe! – thornate