11

だから私は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()、ファイルのようなオブジェクトを受け入れることができます。足りないものはありますか?どんな助けでも大歓迎です。

前もって感謝します!

4

1 に答える 1

13

文字列を ZipFile に追加するには、writestr メソッドを使用し、StringIO インスタンスの getvalue メソッドを使用して StringIO から文字列を渡す必要があります。

例えば

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

zip ファイル内のどこに配置されているかを示すために、文字列の名前も指定する必要があることに注意してください。

于 2011-06-09T22:03:06.210 に答える