2011-06-09 8 views
11

तो मैं एक StringIO() फ़ाइल जैसी वस्तु है, और मैं इसे एक ZipFile() को लिखने की कोशिश कर रहा हूँ, लेकिन मैं इस लेखन त्रुटि मिलती है:मैं एक पायथन स्ट्रिंगियो() ऑब्जेक्ट को 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() फ़ाइल जैसी वस्तु स्वीकार कर सकता है। क्या मैं कुछ छोड़ रहा हूं? किसी भी तरह की सहायता का स्वागत किया जाएगा।

अग्रिम धन्यवाद!

+3

[ZipFile.write() '] (http://docs.python.org/library/zipfile.html#zipfile.ZipFile.write) का पैरामीटर एक फ़ाइल नाम है। –

+1

बस यह पाया; क्या आपकी दूसरी पंक्ति टाइपो है, या वह आपका वास्तविक कोड था? 'ZipFile (file_like' 'के बजाय ZipFile (file_file' – Bogdacutu

उत्तर

12

एक zipfile के लिए एक स्ट्रिंग को जोड़ने के लिए आप writestr विधि का उपयोग करें और StringIO से स्ट्रिंग StringIO उदाहरण

जैसे की getValue पद्धति का उपयोग करके उत्तीर्ण करने की आवश्यकता

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

नोट आपको यह भी कहने के लिए स्ट्रिंग का नाम देना होगा कि यह ज़िप फ़ाइल में कहां रखा गया है।

संबंधित मुद्दे

 संबंधित मुद्दे