2014-11-12 8 views
27

Volevo provare la classe BytesIO python.Scrivere quindi leggere i byte in memoria (BytesIO) dà un risultato vuoto

Come esperimento ho provato a scrivere su un file zip in memoria, e quindi a leggere i byte di nuovo fuori da quel file zip. Quindi, invece di passare un oggetto file a gzip, passo in un oggetto BytesIO. Ecco l'intero script:

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) 

Ma si restituisce un bytes oggetto vuoto per result. Questo accade sia in Python 2.7 che in 3.4. Cosa mi manca?

risposta

44

È necessario seek tornare all'inizio del file dopo aver scritto l'iniziale in file di memoria ...

myio.seek(0) 
+0

Grazie! Era così! – twasbrillig

+2

Anche i buffer riempiti da matplotlib savefig() ne hanno bisogno prima che possano essere inviati da un server delle applicazioni. Grazie per finire ore di ricerca! – TomTom101

Problemi correlati