Ich wollte die Python BytesIO-Klasse ausprobieren.
Als Experiment habe ich versucht, in eine Zip-Datei im Speicher zu schreiben und dann die Bytes wieder aus dieser Zip-Datei zu lesen. Anstatt ein Dateiobjekt an zu übergeben gzip
, übergebe ich ein BytesIO
Objekt. Hier ist das gesamte Skript:
from io import BytesIO
import gzip
# write bytes to zip file in memory
myio = BytesIO()
g = gzip.GzipFile(fileobj=myio, mode='wb')
g.write(b"does it work")
g.close()
# read bytes from zip file in memory
g = gzip.GzipFile(fileobj=myio, mode='rb')
result = g.read()
g.close()
print(result)
Aber es gibt ein leeres bytes
Objekt für zurück result
. Dies geschieht sowohl in Python 2.7 als auch in 3.4. Was vermisse ich?
getvalue()
. Diese kleinen Dinge sind überall verstreut!Wie wäre es, wenn wir gzip-Inhalte im selben Kontext wie diesen schreiben und lesen? Wenn dieser Ansatz gut ist und für Sie funktioniert, lesen Sie bitte +1 für diese Antwort, damit ich diesen Ansatz richtig kenne und für andere Personen arbeite.
#!/usr/bin/env python from io import BytesIO import gzip content = b"does it work" # write bytes to zip file in memory gzipped_content = None with BytesIO() as myio: with gzip.GzipFile(fileobj=myio, mode='wb') as g: g.write(content) g.close() gzipped_content = myio.getvalue() print(gzipped_content) print(content == gzip.decompress(gzipped_content))
quelle