मेरे पास मूर्खतापूर्ण सवाल है। एक अन्य प्रोटोकॉल विकल्प का उपयोग करके पहले से ही cPickled फ़ाइल को फिर से अचार (cPickle) करना संभव है, और यह भी कि कौन सा प्रोटोकॉल बहुत बड़ी फ़ाइल के लिए सबसे अच्छा होगा। किसी भी मदद/सुझावों की सराहना करेंगे।

-1
DGT 22 मार्च 2011, 06:53

2 जवाब

सबसे बढ़िया उत्तर

मैं वास्तव में समझ नहीं पा रहा हूं कि फ़ाइल चुनकर आपका क्या मतलब है। क्या आप एक अचार वाली फ़ाइल को बिना अचार के बाइनरी के रूप में पढ़ना चाहते हैं और फिर उसे फिर से अचार बनाना चाहते हैं? यह कोई समस्या नहीं होनी चाहिए लेकिन मुझे नहीं लगता कि इससे क्या अच्छा होगा ...

अचार में डिफ़ॉल्ट प्रोटोकॉल संस्करण 0, ASCII (अचार डॉक्स) है। नवीनतम बाइनरी प्रोटोकॉल 2 है, जो आपको छोटे फ़ाइल आकार देता है। मेरे लिए एक बाइनरी अचार आउटपुट कुछ jpg चित्र के लिए केवल आधा बड़ा था जैसा कि ASCII अचार के साथ, नीचे कोड।

आप अनाज बनाने वाले पर विचार कर सकते हैं, जिसमें अचार जैसा इंटरफ़ेस है, लेकिन अधिक है सुरक्षित। ऐसा लगता है कि इसका अपना बाइनरी प्रोटोकॉल है, फ़ाइल का आकार अचार बाइनरी जितना छोटा है।

import cerealizer
#import cPickle as cerealizer

def save(data, filename):
    f = open(filename,"wb")
    cerealizer.dump(data, f, protocol=2)
    f.close()

def load(filename):
    f = open(filename,"rb")
    p = cerealizer.load(f)
    f.close()
    return(p)

if __name__ == "__main__":
    import PIL.Image
    import cStringIO as StringIO

    stringIO = StringIO.StringIO()
    im = PIL.Image.open("picture.jpg")
    im.save(stringIO, "JPEG")

    stringIO.seek(0)
    save(stringIO.read(), "testCerealizerIm.txt")

    binaryImageData = load("testCerealizerIm.txt")

    stringIO2 = StringIO.StringIO()
    stringIO2.write(binaryImageData)

    stringIO2.seek(0)
    im = PIL.Image.open(stringIO2)
    im.show()
4
Gonzo 23 मार्च 2011, 12:47

आप इसे अनपिक करें और फिर से अचार बनाएं। प्रोटोकॉल संस्करण को अचार एपीआई के हिस्से के रूप में चुना जा सकता है:

http://docs.python.org/library/pickle.html

2
Andreas Jung 22 मार्च 2011, 07:25