Как передать объект Python StringIO () в ZipFile () или он не поддерживается? - PullRequest
11 голосов
/ 10 июня 2011

Итак, у меня есть 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 Ответ

14 голосов
/ 10 июня 2011

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

, например

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

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

...