पाइथन में अचार के लिए सामान्य उपयोग के मामले


134

मैंने अचार के प्रलेखन को देखा है , लेकिन मुझे समझ नहीं आ रहा है कि अचार कहाँ उपयोगी है।

अचार के लिए कुछ सामान्य उपयोग के मामले क्या हैं?


2
जिस हिस्से को मैं अचार के बारे में नहीं बताता, वह यह है कि आप किसी फ़ाइल का मूल्य क्यों नहीं बचाते? इसका अचार क्यों?
व्हेकमडूडल ३०००

जवाबों:


59

कुछ उपयोग जो मैं भर आया हूँ:

1) एक प्रोग्राम के स्टेट डेटा को डिस्क पर सेव करना ताकि वह फिर से चालू होने पर उसे छोड़ सके जहां वह चल सके (दृढ़ता)

2) बहु-कोर या वितरित प्रणाली (मार्शालिंग) में एक टीसीपी कनेक्शन पर अजगर डेटा भेजना

3) एक डेटाबेस में अजगर वस्तुओं का भंडारण

4) एक मनमानी अजगर वस्तु को एक स्ट्रिंग में परिवर्तित करना ताकि इसे एक शब्दकोश कुंजी (जैसे कैशिंग और ज्ञापन के लिए) के रूप में उपयोग किया जा सके।

पिछले एक के साथ कुछ मुद्दे हैं - दो समान वस्तुओं को चुना जा सकता है और परिणाम अलग-अलग तारों में हो सकते हैं - या यहां तक ​​कि एक ही वस्तु के दो बार अलग-अलग प्रतिनिधित्व हो सकते हैं। ऐसा इसलिए है क्योंकि अचार में संदर्भ गणना की जानकारी शामिल हो सकती है।

@ Lunaryorn की टिप्पणी पर जोर देने के लिए - आपको कभी भी एक अविश्वसनीय स्रोत से एक स्ट्रिंग नहीं खोलनी चाहिए, क्योंकि सावधानीपूर्वक तैयार किया गया अचार आपके सिस्टम पर मनमाने कोड को निष्पादित कर सकता है। उदाहरण के लिए देखें https://blog.nelhage.com/2011/03/exploiting-pickle/


27
किसी को नेटवर्क या अन्य अविश्वसनीय चैनलों पर अचार वाली वस्तुओं को स्थानांतरित नहीं करना चाहिए, जब तक कि चुराया गया डेटा सावधानी से हेरफेर के खिलाफ सुरक्षित न हो। अचार प्रलेखन स्पष्ट रूप से अविश्वसनीय या गैर-स्रोत स्रोतों से डेटा को अनपिक करने की चेतावनी नहीं देता है ।
चंद्र

4
@lunaryorn: अच्छी बात है। यदि आप मशीनों के बीच पिक किए गए डेटा को स्थानांतरित करने जा रहे हैं, तो एक सुरक्षित चैनल जैसे एसएसएल या एसएसएच टनलिंग का उपयोग करें।
डेव किर्बी

3
तब आप अभी भी समापन बिंदु पर भरोसा कर रहे हैं कि आपका शोषण न हो, जो संदर्भ के आधार पर ठीक हो या न हो।
L --o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e

@lunaryorn - अच्छी बात है लेकिन उस स्थिति में हम सार्वजनिक डोमेन में डेटा को कैसे एन्क्रिप्ट कर सकते हैं। क्या हमें अचार का उपयोग करना है या अचार का उपयोग नहीं करना है
परदीप शर्मा

बिंदु 4) सच है? मैंने पाया कि यहाँ कुछ (पुराने) सबूत हैं जो यहाँ काम नहीं करेंगे ।
सालोट्ज

10

न्यूनतम गोलमटोल उदाहरण ।।

>>> import pickle
>>> a = Anon()
>>> a.foo = 'bar'
>>> pickled = pickle.dumps(a)
>>> unpickled = pickle.loads(pickled)
>>> unpickled.foo
'bar'

संपादित करें: लेकिन अचार के वास्तविक दुनिया के उदाहरणों के सवाल के लिए, शायद अचार का सबसे उन्नत उपयोग (आपको स्रोत में काफी गहरा खुदाई करना होगा) ZODB है: http://svn.zope.org/

अन्यथा, PyPI में कई उल्लेख हैं: http://pypi.python.org/pypi?:action=search&term=pickle&submit=search

मैंने नेटवर्क ट्रांसफ़र प्रोटोकॉल का उपयोग करने में आसान के रूप में नेटवर्क पर भेजी जाने वाली अचार की वस्तुओं के व्यक्तिगत रूप से कई उदाहरण देखे हैं।


8

वितरित और समानांतर कंप्यूटिंग के लिए अचार पूरी तरह से आवश्यक है।

कहते हैं कि आप समानांतर नक्शा कम करना चाहते थे multiprocessing(या पाइना के साथ क्लस्टर नोड्स के पार ), तो आपको यह सुनिश्चित करने की आवश्यकता है कि आप जिस समानांतर संसाधन में मैप करना चाहते हैं वह अचार करेगा। यदि यह अचार नहीं करता है, तो आप इसे किसी अन्य प्रक्रिया, कंप्यूटर, आदि पर अन्य संसाधनों के लिए नहीं भेज सकते हैं एक अच्छा उदाहरण के लिए यहां भी देखें ।

ऐसा करने के लिए, मैं डिल का उपयोग करता हूं , जो कि अजगर में लगभग कुछ भी धारावाहिक कर सकता है। डिल में आपके पास कुछ अच्छे साधन हैं जो आपको यह समझने में मदद करते हैं कि आपके कोड के विफल होने पर क्या आपके अचार को विफल कर रहा है।

और, हाँ, लोग किसी गणना की स्थिति, या आपके ipython सत्र, या जो कुछ भी हो, उसे सहेजने के लिए उठाते हैं ।


7

मैंने अपने एक प्रोजेक्ट में इसका इस्तेमाल किया है। यदि यह काम करने के दौरान ऐप को समाप्त कर दिया गया था (यह एक लंबा काम था और बहुत सारे डेटा को संसाधित करता है), मुझे ऐप को फिर से चलाने के बाद पूरे डेटा संरचना को बचाने और इसे फिर से लोड करने की आवश्यकता थी। मैंने इसके लिए cPickle का उपयोग किया, क्योंकि गति एक महत्वपूर्ण बात थी और डेटा का आकार वास्तव में बड़ा था।


4

अचार आपकी डेटा संरचनाओं और कक्षाओं के लिए "सेव अस .." और "ओपन .." जैसा है। मान लीजिए कि मैं अपनी डेटा संरचनाओं को सहेजना चाहता हूं ताकि यह प्रोग्राम रन के बीच लगातार बना रहे।

सहेजा जा रहा है:

with open("save.p", "wb") as f:    
    pickle.dump(myStuff, f)        

लोड हो रहा है:

try:
    with open("save.p", "rb") as f:
        myStuff = pickle.load(f)
except:
    myStuff = defaultdict(dict)

अब मुझे बार-बार खरोंच से मायस्टफ का निर्माण नहीं करना है, और मैं बस ले (ले) कर सकता हूं जहां से मैंने छोड़ा था।


3

शुरुआती के लिए (जैसा कि मेरे साथ मामला है) यह समझना मुश्किल है कि आधिकारिक दस्तावेज पढ़ते समय पहले स्थान पर अचार का उपयोग क्यों करें । यह शायद इसलिए है क्योंकि डॉक्स का अर्थ है कि आप पहले से ही क्रमबद्धता के पूरे उद्देश्य को जानते हैं। सीरियलाइजेशन के सामान्य विवरण को पढ़ने के बाद ही मैंने इस मॉड्यूल के कारण और इसके सामान्य उपयोग के मामलों को समझा है। किसी विशेष प्रोग्रामिंग भाषा की अवहेलना करने वाले क्रमांकन के व्यापक स्पष्टीकरण भी मदद कर सकते हैं: https://stackoverflow.com/a/14482962/4383472 , क्रमांकन क्या है? , https://stackoverflow.com/a/3984483/4383472


आपका "उत्तर" एक उत्तर नहीं है, यह एक टिप्पणी के अधिक है। ओपी का सवाल है "अचार के लिए कुछ सामान्य उपयोग के मामले क्या हैं?"। क्या आपको लगता है कि आपने किसी भी तरह से उस सवाल का जवाब दिया है?
माइक मैकरनस

3
ठीक है, मुझे लगता है कि मैं सवाल का जवाब दे दिया है क्योंकि मैं भी अचार के सामान्य उपयोग को समझने के लिए कठिनाई हुई, जब मैं इस मॉड्यूल के बारे में पढ़ने के लिए करने की कोशिश की लग रहा है यहां , यहां और यहां । क्योंकि ज्यादातर वे यह बताना शुरू करते हैं कि अचार क्या ग्रहण करता है जिससे आप क्रमबद्धता की पूरी अवधारणा के पीछे की प्रेरणा को जानते हैं। सीरियलाइज़ेशन पर साधारण विकि लेख पढ़ने के बाद मैंने सामान्य विचार के साथ-साथ "सामान्य मामलों" को भी समझा। शायद यह किसी को मदद करेंगे ...
बुरा

और उन आम मामलों में से कुछ हैं ...? यदि कुछ ऐसे हैं जो अन्य उत्तरों में यहाँ सूचीबद्ध नहीं हैं ... तो उन्हें आपके उत्तर में जोड़ना बहुत उचित होगा।
माइक मैकरनस

2

एक वास्तविक दुनिया के उदाहरण को जोड़ने के लिए: पाइथन के लिए स्फिंक्स प्रलेखन उपकरण दस्तावेज़ के बाद के निर्माण को गति देने के लिए दस्तावेजों के बीच पार्स किए गए दस्तावेज़ों और क्रॉस-संदर्भों को अचार का उपयोग करता है।


1

मैं आपको उन उपयोगों के बारे में बता सकता हूं जिनके लिए मैं इसका उपयोग करता हूं और इसके लिए उपयोग किए गए हैं:

  • गेम प्रोफाइल बचाता है
  • गेम डेटा जीवन और स्वास्थ्य की तरह बचाता है
  • प्रोग्राम में इनपुट संख्याओं के पिछले रिकॉर्ड

उन लोगों को मैं इसे कम से कम के लिए उपयोग कर रहे हैं


1

मैं उस समय किसी वेबसाइट को स्क्रैप करने के दौरान 8000 से अधिक url स्टोर करना चाहता हूं और जितनी जल्दी हो सके उन्हें प्रोसेस करना चाहता हूं, इसलिए मैं अचार का उपयोग करता हूं क्योंकि इसकी आउटपुट क्वालिटी बहुत अधिक है।

आप आसानी से url तक पहुँच सकते हैं और जहाँ आप नौकरी निर्देशिका को रोकते हैं कुंजी शब्द भी प्रक्रिया को फिर से शुरू करने के लिए बहुत तेज़ी से url विवरण प्राप्त करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.