问题 如何将Python StringIO()对象传递给ZipFile(),还是不受支持?


所以我有一个 StringIO() 类似文件的对象,我正在尝试将其写入 ZipFile(),但我得到这个TypeError:

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

以下是我正在使用的代码示例:

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)

文档说 StringIO() 是一个类似文件的类 ZipFile() 可以接受类似文件的对象。有什么我想念的吗?任何帮助将不胜感激。

提前致谢!


3679
2018-06-09 21:47


起源

参数来 ZipFile.write() 是一个文件名。 - Sven Marnach
刚发现这个;你的第二行有错字,还是你的实际代码? ZipFile(file_file 代替 ZipFile(file_like - Bogdacutu


答案:


要将字符串添加到ZipFile,您需要使用writestr方法并使用StringIO实例的getvalue方法从StringIO传递字符串

例如

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

请注意,您还需要提供字符串的名称,以说明它在zip文件中的位置。


12
2018-06-09 22:03