So I have a StringIO()
file-like object, and I am trying to write it to a ZipFile()
, but I get this TypeError:
coercing to Unicode: need string or buffer, cStringIO.StringI found
Here is a sample of the code I am using:
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)
The docs say that StringIO()
is a file-like class and that ZipFile()
can accept a file-like object. Is there something I am missing? Any help would be greatly appreciated.
Thanks in advance!
To add a string to a ZipFile you need to use the writestr method and pass the string from StringIO using getvalue method of the StringIO instance
e.g.
archive.writestr("name of file in zip", my_file.getvalue())
Note you also need to give the name of the string to say where it is placed in the zip file.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With