How can I pass a Python StringIO() object to a ZipFile(), or is it not supported?

主宰稳场 提交于 2019-11-30 23:13:38

问题


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!


回答1:


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.



来源:https://stackoverflow.com/questions/6299724/how-can-i-pass-a-python-stringio-object-to-a-zipfile-or-is-it-not-supported

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!