Coding for KidsCoding for Kids
रचनात्मक स्तरचुनौतियांशिक्षक गाइड
सुविधाओं के लिए वोट करें
उन्नत पायथन विकास पाठ्यक्रम
अध्याय
>
स्तर

स्ट्रिंग और टाइम मॉड्यूल्स
Regex मॉड्यूल

उद्देश्य

नियमित अभिव्यक्तियों (Regular Expressions) का उपयोग करके कर्मचारियों और जोनिंग आवंटन से संबंधित फाइलों को सत्यापित और व्यवस्थित करें।

पड़ोस के कार्यालयों में कुछ दस्तावेजीकरण है जिन्हें अपडेट करने की आवश्यकता है, जो नए कृषि क्षेत्र में काम शुरू करने वाले कर्मचारियों और फसलों तथा पशुधन की देखभाल के लिए निर्धारित जोनिंग से संबंधित है। फाइलों का प्रबंधन करना काफी मुश्किल हो सकता है, विशेषकर जब बहुत बड़े स्ट्रिंग टेक्स्ट का प्रबंधन करना हो। इस उद्देश्य के लिए हम re मॉड्यूल का उपयोग करेंगे, जिसका पूरा नाम Regular Expressions है, जिसे Regex के नाम से भी जाना जाता है। हम इसके फंक्शंस का उपयोग करने के लिए import re का उपयोग करते हैं। इस स्तर के उद्देश्यों के लिए हम निम्नलिखित फंक्शंस का उपयोग करेंगे:

  • re.findall(): स्ट्रिंग में सभी बार किसी स्ट्रिंग की उपस्थिति की सूची लौटाता है। इसमें दो (2) आर्गुमेंट्स होते हैं, पहला वह कैरेक्टर्स जिन्हें आप स्ट्रिंग में ढूंढ रहे हैं, दूसरा वह स्ट्रिंग जिसमें खोज की जानी है।
  • re.sub(): निर्दिष्ट उपस्थिति को किसी निश्चित स्ट्रिंग से बदल देता है। इसमें तीन (3) आर्गुमेंट्स होते हैं, पहला वह कैरेक्टर्स जिन्हें आप बदलना चाहते हैं, दूसरा वह जिस से आप बदलना चाहते हैं और तीसरा वह स्ट्रिंग जिसमें आप खोज करना चाहते हैं।
  • re.search(): किसी स्ट्रिंग में किसी चीज़ की लोकेशन खोजता है, एक ऑब्जेक्ट लौटाता है। इसमें दो (2) आर्गुमेंट्स होते हैं, जो कैरेक्टर्स आप खोज रहे हैं और वह स्ट्रिंग जिसमें आप खोज रहे हैं। आप इस ऑब्जेक्ट के साथ अन्य फंक्शंस का उपयोग कर सकते हैं जैसे span() जो खोजे गए आइटम की शुरूआत और अंत की पोजीशन का वेक्टर लौटाता है।
  • re.split(): निर्दिष्ट अंतराल पर स्ट्रिंग को सूची में विभाजित करता है। इसमें दो (2) आर्गुमेंट्स होते हैं, पहला कि कहां स्ट्रिंग को विभाजित करना है और दूसरा वह स्ट्रिंग जिसे आप विभाजित करना चाहते हैं।
  • re.match(): जांचता है कि स्ट्रिंग की शुरुआत में कोई निश्चित मान है या नहीं। यह re.search() के सरलीकृत संस्करण की तरह काम करता है लेकिन अधिक कुशल होता है और जांचता है कि जिस स्ट्रिंग में आप खोज रहे हैं, उसमें क्वेरी शुरुआत में है या नहीं।

re मॉड्यूल विशेष सीक्वेंस का भी उपयोग कर सकता है, ऐसे कोड हैं जिन्हें आप re functions के साथ उपयोग कर सकते हैं जो अन्य स्ट्रिंग गुणों को शामिल करने की अनुमति देते हैं। विशेष सीक्वेंस की एक लंबी सूची है लेकिन इस स्तर के लिए हम निम्नलिखित का उपयोग करेंगे:

  • \B: जांचता है कि निर्दिष्ट कैरेक्टर्स स्ट्रिंग में हैं लेकिन शब्द की शुरुआत या अंत में स्थित नहीं हैं।
  • \D: ऐसे कैरेक्टर्स लौटाता है जो अंकीय (0-9) नहीं होते हैं।

यदि किसी विशेष सीक्वेंस के साथ एक r उपस्थित है, तो इसका अर्थ है कि यह कच्ची स्ट्रिंग (raw string) की जांच कर रहा है।

सुनिश्चित करें कि आप सोने के X मार्क की ओर चलें और मेमो के साथ टेबल का सामना करें, read() फंक्शन का उपयोग करके मेमो की जांच करें जिसमें सभी कर्मचारियों का एक सूची अभिलेख (manifest) शामिल है। प्रत्येक नाम में # होता है जो उनके कर्मचारी नंबर की सीमा दर्शाता है, नामों वाली स्ट्रिंग एक कॉन्स्टेंट manifest में स्टोर की गई है।

एक सूची बनाएं जिसका नाम tags है और re.findall() का उपयोग करके manifest कॉन्स्टेंट में सभी # खोजें, इस प्रकार: tags = re.findall("#", manifest) . एक वेरिएबल बनाएं जिसका नाम number है और len() का उपयोग करके tags सूची में कितने आइटम हैं यह गिनें, इससे हमें पता चलेगा कि manifest में कितने कर्मचारी हैं। speak() फंक्शन का उपयोग number वेरिएबल के साथ करें ताकि यह घोषणा की जा सके कि सूची में कितने नाम हैं।

इसके बाद, नीले कालीन के पास स्थित हल्के X मार्क की ओर चलें और डेस्क का सामना करें और read() फंक्शन का उपयोग करें। यहाँ आपके पास नए कर्मचारियों की एक सूची होगी जिनके पास उनके निर्धारित पद हैं। प्रत्येक पेशे में नामों का नोट रखें ताकि आप वर्तमान में नियुक्त लोगों के साथ क्रॉस रेफरेंस कर सकें। नीले कालीन के ऊपर X मार्क की ओर चलें और वर्तमान में निर्धारित नौकरियों की पुष्टि करने के लिए फिर से read() का उपयोग करें।

वर्तमान कार्यबल एक कॉन्स्टेंट assignments में स्टोर किया गया है, हमें इस दस्तावेज़ को नए कर्मचारियों की सूची की जानकारी के साथ अपडेट करना है। सूची में अलग-अलग नामों को बदलने के लिए re.sub() फंक्शन का उपयोग करें ताकि स्ट्रिंग के एक भाग को दूसरे भाग से प्रतिस्थापित किया जा सके। उदाहरण के लिए, निम्नलिखित में से एक संपादन इस प्रकार है:

assignments = re.sub("Billy Hodgins", "Carol Hopkins", assignments)

दस्तावेज़ में नाम "Billy Hodgins" को "Carol Hopkins" से प्रतिस्थापित किया जाता है। इस परिवर्तन को छोड़कर दस्तावेज़ को स्कैन करें और सूची में एक अन्य नाम को अपडेट करें ताकि दस्तावेज़ पूरी तरह से अपडेट हो सके। परिणामों की जांच करने के लिए assignments के साथ write() फंक्शन का उपयोग करें।

अब जब हमने कर्मचारियों की सूची देख ली है, तो फसल के खेत की जोनिंग पर ध्यान देने का समय है। लाल कालीन के ऊपर स्थित गहरे X मार्क की ओर चलें और read() फंक्शन का उपयोग करें, यह आपको जोनिंग का विस्तृत अवलोकन दिखाएगा। यह जानकारी एक कॉन्स्टेंट zones में स्टोर की गई है।

विशेष ध्यान देने योग्य बात यह है कि दस्तावेज़ में 6210 का स्थान पहचानना महत्वपूर्ण है क्योंकि उस जोन का पुनर्मूल्यांकन करने की आवश्यकता है। ऐसा करने के लिए हमें re.search() फंक्शन का उपयोग करके उस सेक्टर नंबर के स्थान की पहचान करनी होगी। एक वेरिएबल बनाएं जिसका नाम index है और खोज ऑब्जेक्ट स्टोर करें, खोज को सेट करें r"6210\B" के साथ। इसका अर्थ है, r कच्ची स्ट्रिंग की ओर इशारा करता है, 6210 वह जोन सेक्टर है जिसकी हमें तलाश है, और \B खोज के लिए विशेष सीक्वेंस मानदंड है। इसे इस प्रकार किया जाता है: index = re.search(r"6210\B", zones) .

अब जब index में एक खोज ऑब्जेक्ट है, तो span() का उपयोग करके इससे डेटा निकाले। एक वेरिएबल बनाएं जिसका नाम vector है और खोज ऑब्जेक्ट का स्थान स्टोर करें, इस प्रकार: vector = index.span() . एक बार सेट होने पर, पहले से लिखित write() के साथ vector वेरिएबल का उपयोग करें।

अब हम जोनिंग आइटमों की पहचान पर काम करेंगे, हरे कालीन के ऊपर स्थित गहरे X मार्क की ओर चलें। एक सूची बनाएं जिसका नाम sectors है और re.split() फंक्शन का उपयोग करके विभिन्न जोनिंग सेक्टर्स को सूची में समेकित करें। re.split() फंक्शन में विशेष सीक्वेंस "\D" का उपयोग करें ताकि zones वेरिएबल से केवल नंबर ही प्राप्त हों। सूची समझ (list comprehension) का उपयोग करके सूची में किसी भी खाली स्थान को हटाएं, len() फंक्शन का उपयोग करके उन आइटमों को हटाएं जो सेक्टर नंबर के लिए पर्याप्त नहीं हैं। उदाहरण के लिए:

sectors = re.split("\D", zones) sectors = [x for x in sectors if len(x) > 3]

सभी जोनिंग सेक्टर्स को नक्शे में दर्शाने के लिए zones के साथ write() फंक्शन का उपयोग करें।

बैंगनी कालीन के पास स्थित हल्के X मार्क की ओर चलें और फ़ाइलिंग कैबिनेट का सामना करें, read() फंक्शन का उपयोग करके कृषि भूमि जोनिंग में प्राथमिकता वाले सेक्टर्स की पुष्टि करें। उन सेक्टर्स के नोट बनाएं क्योंकि हमें सत्यापित करना है कि ये सेक्टर्स जोनिंग सूची में मौजूद हैं या नहीं।

बैंगनी कालीन के ऊपर स्थित गहरे X मार्क की ओर चलें, वहाँ तीन (3) प्राथमिकता सेक्टर्स हैं जिनके वेरिएबल नाम हैं: sector_a, sector_b, sector_c, जो कोड एडिटर्स में पहले से लिखित हैं। उन मानों को 삽입 करें जिन्हें आपने हल्के X मार्क पर पढ़ा था। ये वेरिएबल्स एक सूची समझ (list comprehension) का उपयोग करते हैं जो sectors सूची में सभी आइटमों से गुजरते हैं और उन्हें re.match() फंक्शन के माध्यम से फ़िल्टर करते हैं। स्तर को पूरा करने के लिए पूर्व-लिखित write() फंक्शन में sector_a, sector_b, sector_c वेरिएबल्स को डालें।

कोड बुक