क्या यह जांचने का कोई तरीका है कि फ़ाइल को pickle
द्वारा बनाया गया है? मैं सिर्फ pickle.load
द्वारा फेंकने वाले अपवादों को पकड़ सकता हूं लेकिन कोई विशिष्ट "अचार नहीं है" अपवाद नहीं है।अचार द्वारा फ़ाइल बनाई गई है या नहीं, इसका परीक्षण कैसे करें?
उत्तर
अचार फ़ाइलों के पास हेडर नहीं है इसलिए ऐसा करने के दौरान उन्हें अनपिक करने की कोशिश करने से कम पहचानने का कोई मानक तरीका नहीं है और ऐसा करने पर कोई अपवाद उठाया गया है या नहीं।
आप अपनी खुद की बढ़ाया प्रोटोकॉल pickle
मॉड्यूल में Pickler()
और Unpickler()
कक्षाएं उपवर्गीकरण द्वारा हेडर के कुछ प्रकार शामिल निर्धारित कर सकते हैं। हालांकि यह cPickle
मॉड्यूल के साथ बहुत तेज़ नहीं किया जा सकता है क्योंकि इसमें फ़ैक्टरी फ़ंक्शन हैं जिन्हें [1] उपखंडित नहीं किया जा सकता है।
एक और अधिक लचीला दृष्टिकोण आपके स्वयं के स्वतंत्र वर्गों को परिभाषित करेगा जो Pickler()
और Unpickler()
के कार्यान्वयन में इन मॉड्यूल में से किसी एक से उदाहरण थे।
अद्यतन
सभी अचार फ़ाइलों के अंतिम बाइट, pickle.STOP
opcode होना चाहिए इसलिए जब वहाँ एक शीर्ष लेख नहीं है, वहाँ प्रभावी रूप से एक बहुत कम ट्रेलर जो करने के लिए एक अपेक्षाकृत सरल बात होगी चेक।
अपने सटीक उपयोग के आधार पर आप के पूरक है कि एक मसालेदार वस्तु के प्रतिनिधित्व में अतीत STOP
opcode किसी भी डेटा के बाद से और अधिक व्यापक कुछ के साथ नजरअंदाज कर दिया है के साथ भाग प्राप्त करने में सक्षम हो सकता है [2]।
-
[1] अजगर 2 दस्तावेज में
Footnote [2]।
[2]
pickle.loads()
है, जो भी
pickle.load()
पर लागू होता है, क्योंकि यह वर्तमान में बाद के मामले में लागू हो जाता है के लिए प्रलेखन।
इसे अनपिक करने की कोशिश करने और अपवादों को पकड़ने के अलावा कोई निश्चित तरीका नहीं है।
सिरका और डिल के निशान की जांच करें –
क्या आप इस बारे में चिंतित हैं कि फ़ाइल * बनाई गई है * जब आपने अभी 'pickle.dump' का उपयोग किया था, या जब आप' pickle.load' का उपयोग करते हैं तो फ़ाइल मौजूद है या नहीं? किसी भी मामले में, त्रुटि तब होती है जब आप आउटपुट या इनपुट के लिए फ़ाइल हैंडल खोल रहे हैं, वास्तविक 'अचार' रेखा में नहीं। –
मैं इस बारे में चिंतित नहीं हूं कि फाइल मौजूद है या नहीं, लेकिन इस बारे में कोई जानकारी नहीं है कि मौजूद एक फाइल 'pickle' द्वारा बनाई गई है या नहीं। – Erik