Как передать объект 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-файле.