#python #zipfile #stringio
#python #stringio #python-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.write()
является имя файла.2. Только что нашел это; есть ли опечатка во второй строке, или это был ваш фактический код?
ZipFile(file_file
вместоZipFile(file_like
Ответ №1:
Чтобы добавить строку в ZipFile, вам нужно использовать метод writestr и передать строку из StringIO, используя метод getvalue экземпляра StringIO
например
archive.writestr("name of file in zip", my_file.getvalue())
Обратите внимание, что вам также необходимо указать имя строки, чтобы указать, где она находится в zip-файле.