Ich kann das mit 'zipfle' und 'compression=zipfile.ZIP_DEFLATED' machen - das funktioniert gut. Aber mit gzip bekomme ich das nicht hin!?
Irgendwie steh ich da 'auf dem Schlauch'!?
Ich habe zwei Versuche:
Code: Alles auswählen
VERSUCH 1
import gzip
import shutil
sourcefile = 'assets/pic01.jpg'
targetfile = 'assets/picGZIP.jpg.gz'
with open(sourcefile, 'rb') as f_in:
with gzip.open(targetfile, 'wb') as f_out:
# comp_file = gzip.compress(f_out, 9)
shutil.copyfileobj(f_in, f_out)
VERSUCH 2:
with open(sourcefile, 'rb') as f_in:
with open(targetfile, 'wb') as f_out:
with gzip.GzipFile(sourcefile, 'wb', fileobj=f_out, compresslevel=9) as f_out:
shutil.copyfileobj(f_in, f_out)
Ich kann mit beider Versionen zwar gz archive erstellen, aber die Dateigröße bleibt unverändert. Wen ich versuche gzip.compress() (Versuch 1) mit dem Fileobjekt zu verwenden bekomme ich den Fehler:
Code: Alles auswählen
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/gzip.py", line 276, in write
data = memoryview(data)
TypeError: memoryview: a bytes-like object is required, not 'GzipFile'
Wie mache ich das am sinnvollsten!? Ich weiss vorher nicht immer, was fur einen Dateityp ich offnen werde, daher dachte ich 'rb' ist ganz sinnvoll.
Verstehe ich das richtig und ich muss mein ganzes Fileobjekt jedesmal fur compress() erstmal in ein byte Objekt konvertieren!?
Oder weshalb funktioniert 'compresslevel=9' (Versuch 2) eigentlich nicht!? Es bleibt einfach ohne Wirkung!? Der gz file ist mit 5.1 MB genauso gross wie der sourcefile (pic01.jpg)!?