¿Cómo puedo pasar un objeto StringIO () de Python a un ZipFile (), o no es compatible?

Así que tengo un StringIO() tipo StringIO() , y estoy intentando escribirlo en un ZipFile() , pero obtengo este TypeError:

 coercing to Unicode: need string or buffer, cStringIO.StringI found 

Aquí hay una muestra del código que estoy usando:

 file_like = StringIO() archive = zipfile.ZipFile(file_like, 'w', zipfile.ZIP_DEFLATED) # my_file is a StringIO object returned by a remote file storage server. archive.write(my_file) 

Los documentos dicen que StringIO() es una clase similar a un archivo y que ZipFile() puede aceptar un objeto similar a un archivo. ¿Hay algo que este olvidando? Cualquier ayuda sería muy apreciada.

¡Gracias por adelantado!

Para agregar una cadena a un archivo Zip, debe usar el método writestr y pasar la cadena desde StringIO usando el método getvalue de la instancia de StringIO

p.ej

 archive.writestr("name of file in zip", my_file.getvalue()) 

Tenga en cuenta que también debe dar el nombre de la cadena para indicar dónde se coloca en el archivo zip.