How can I pass a Python StringIO() object to a ZipFile(), or is it not supported?
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 acce开发者_运维百科pt a file-like object. Is there something I am missing?
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.
精彩评论