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

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