Как передать объект Python StringIO() в ZipFile() или он не поддерживается?

Итак, у меня есть StringIO() файлоподобный объект, и я пытаюсь записать его в ZipFile(), но я получаю эту ошибку типа:

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-файле.

Другие вопросы по тегам