开发者

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

开发者 https://www.devze.com 2023-03-12 08:29 出处:网络
I have a StringIO() file-like object, and I am trying to write it to a ZipFile(), but I get this TypeError:

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消