Как передать объект 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() может принимать файл-подобный объект. Есть что-то, чего я не хватает? Любая помощь будет принята с благодарностью.

Спасибо заранее!

Ответ 1

Чтобы добавить строку в ZipFile, вам нужно использовать метод writestr и передать строку из StringIO с помощью метода getvalue экземпляра StringIO

например.

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

Обратите внимание, что вам также нужно указать имя строки, чтобы указать, где она помещена в zip файл.