Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

एमएमएपी फ़ंक्शन के साथ पायथन में फ़ाइल पढ़ने के प्रदर्शन में सुधार कैसे करें?

परिचय..

जब किसी फ़ाइल में मैप किया जाता है तो एमएमएपी को मेमोरी मैपिंग के रूप में संक्षिप्त किया जाता है, सामान्य I/O फ़ंक्शन के साथ डेटा तक पहुंचने के बजाय, फ़ाइल सिस्टम पर डेटा को सीधे एक्सेस करने के लिए ऑपरेटिंग सिस्टम वर्चुअल मेमोरी का उपयोग करता है। वहाँ I/O प्रदर्शन में सुधार करके क्योंकि इसके लिए प्रत्येक एक्सेस के लिए अलग सिस्टम कॉल करने या बफ़र्स के बीच डेटा कॉपी करने की आवश्यकता नहीं होती है।

वास्तव में स्मृति में कुछ भी उदाहरण के लिए स्मृति में बनाए जाने पर SQLlite डेटाबेस डिस्क की तुलना में बेहतर प्रदर्शन करता है।

आप जो करना चाहते हैं, उसके आधार पर मेमोरी-मैप की गई फ़ाइलों को परिवर्तनशील स्ट्रिंग्स या फ़ाइल जैसी वस्तुओं के रूप में माना जा सकता है।

एमएमएपी कई तरीकों का समर्थन करता है, जैसे कि क्लोज (), फ्लश (), रीड (), रीडलाइन (), सीक (), बताओ (), राइट () और स्लाइस ऑपरेशन और यहां तक ​​कि रेगुलर एक्सप्रेशन के साथ बहुत अच्छी तरह से काम कर सकता है।

इसे कैसे करें..

1. नीचे दी गई सामग्री के साथ एक टेक्स्ट फ़ाइल मान लें। आप केवल Google का उपयोग करके और नमूना पाठ की खोज करके यह पाठ प्राप्त कर सकते हैं। इन सामग्रियों को एक input.txt फ़ाइल में कॉपी करें।

लोरेम इप्सम डोलर सिट एमेट, कॉसे एपीरियन ईए हिज़, डुओ क्यू कॉन्गू प्रोडेसेट। यूट एपिकुरी इनवेनियर डुओ, नोवम राइड्स ईयू हैज़, इन नेटम मेलियोर नोलुइस सी। ईई स्टेट स्पष्टीकरण है। नो नेम इरमॉड डिटर्रुइसेट, नुसक्वाम इलेक्ट्रम रतिनिबस एड सी, इंटरसेट डेलिकाटिसिमी एट सिट। पुर्तो मोलेस्टिया क्यू ईम, प्रति हिंक पेरिकुलिस इंटेलेगाम में।

आईडी पोरो facete सह. कोई इस्ट वेरिटस डिट्रैक्सिट फैसिलिसिस, सिट ई क्लिटा डेकोर एसेंट। यूट ईम लेबरस फ्यूसेट मेनंद्री, एक्स सिट ब्रूट वीडरर एलीफेंड, अल्टर एर्ग्युमेंटम वेल एक्स। Duo at zril sensibus, eu vim ullum assentior, quando possit at the his.

ते नाम टेम्पोर पोसिडोनियम स्क्रिप्सेरिट, ईम मुंडी रिप्रिमिक डिसेंटियास ने। विम ते सोलेट ऑफेंडिट डेमोक्रिटम। नाम एक डायम विस्तृत, क्वैक डिसेंटियास ए है। ऑटम लीजेंडोस डिग्निसिम एड विज़, सी एक्स एमेट पेटेंटियम रिप्रेहेंडेंट, इनर्मिस कॉन्स्टिट्यूम फिलोसोफिया ने मेल। Esse noster lobortis usu ne.

नेक रिक्वेस्ट पोस्टिया अर्बनिटस यूटी, मे इन नाला इनविडंट ऑक्यूरेट। एई डुओ इयुवरेट numquam। फेरी नेमोर ऑडिरे ते इस्ट, मेल एट डिट्रैक्टो नोलुइस। नेक यू हाबियो जस्टो, आईडी प्रो पोज़ एपिरियन वॉलटपैट। मे सोनेट क्वास्टियो ने।

अतकी क़ैक एलियनम ते विम। ग्रीको एलिक्विप लिबरविसे प्रो यू.टी. ते सिमिलिक रिफॉर्मिडन्स यूसु, ते मुंडी अलिकंडो आईयूएस। इस स्क्रिप्ट में न्यूनतम यथा संख्या, मेइस प्राइमा फैबेलस ईयू ईएएम, लॉरीट डेलिकटा फोरेंसिबस यूटी विम। वगैरह मेडिओक्रिटेटम, अतक्वि समो एन ईम।

2. हम मेमोरी-मैप की गई फ़ाइल बनाने के लिए mmap() फ़ंक्शन का उपयोग करेंगे। हम फ़ाइल नाम को फ़ाइल ऑब्जेक्ट की fileno() विधि या os.open() से पास कर सकते हैं।

नोट:उपयोगकर्ता mmap() को लागू करने से पहले फ़ाइल को खोलने और उसे बंद करने के लिए ज़िम्मेदार है।

एमएमएपी () का दूसरा तर्क बाइट्स में एक आकार है जो फ़ाइल के हिस्से को मैप करने के लिए दर्शाता है। यदि मान 0 है, तो संपूर्ण फ़ाइल मैप की जाती है। एक अतिरिक्त तर्क भी है जिसका आप उपयोग कर सकते हैं, जो केवल-पढ़ने के लिए ACCESS_READ, राइट-थ्रू एक्सेस के लिए ACCESS_WRITE, और राइट-एक्सेस पर कॉपी के लिए ACCESS_COPY है।

import mmapinput_text ="""लोरेम इप्सम डोलर सिट एमेट, कॉसे एपिरियन ईए हिज़, डुओ क्यू कॉन्ग्यू प्रोडेसेट। यूट एपिकुरी इनवेनियर डुओ, नोवम राइड्स ईयू हैज़, इन नेटम मेलियोर नोलुइससे सी। इसमें ई स्टेट एक्सप्लिकरी है। कोई नाम नहीं है। , nusquam इलेक्ट्रम रतिनिबस एड सी, इंटरसेट डेलिकाटिसिमी एट सिट। पुर्टो मोलेस्टिया क्यू ईयूएम, प्रति हिंक पेरिकुलिस इंटेलेगाम में। आईडी पोरो फेसे सह। कोई इस्ट वेरिटस डिट्रैक्सिट फैसिलिसिस, बैठने के लिए बैठने की जरूरत नहीं है। एलीफेंड, अल्टेरा आर्गुमेंटम वेल एक्स। डुओ एट ज़्रिल सेंसिबस, ईयू विम उल्लम असेंटियर, क्वांडो पॉज़िट एट हिज़। ते नाम टेम्पोर पोसिडोनियम स्क्रिप्सेरिट, ईम मुंडी रिप्रिमिक डिसेंटियास ने। विम ते एकमात्र ऑफेंडिट डेमोक्रिटम। नाम एक डायम विस्तृत है। ऑटम लीजेंडोस डिग्निसिम एड विज़, सी एक्स एमेट पेटेंटियम रिप्रेहेंडेंट, इनर्मिस कॉन्स्टिट्यूम फिलोसोफिया ने मेल। एसे नोस्टर लोबोर्टिस यूसु ने। नेक रिक्वेस्ट पोस्टिया अर्बनिटास यूटी, मे इन नाला इनविडंट ऑक्यूरेट। ईई डुओ इउवरेट न्यूमक्वाम। ऑडिरे ते इस्ट, मेल एट डिट्रैक्टो नोलुइस। नेक यू हाबियो जस्टो, आईडी प्रो पोज़ एपिरियन वॉलटपैट। मे सोनेट क्वास्टियो ने। अतकी क्यूएक्यू एलियनम ते विम। ग्रीको एलिक्विप लिबरविसे प्रो यू.टी. ते सिमिलिक रिफॉर्मिडन्स यूसु, ते मुंडी अलिकंडो आईयूएस। इस स्क्रिप्ट में न्यूनतम यथा संख्या, मेइस प्राइमा फैबेलस ईयू ईएएम, लॉरीट डेलिकटा फोरेंसिबस यूटी विम। वगैरह मेडिओक्रिटेटम, अतक्वि समो एन ईएएम।" ""# कुछ टेक्स्टइनपुट_फाइल ='इनपुट.txt'f =ओपन (इनपुट_फाइल, "डब्ल्यू+")f.राइट (इनपुट_टेक्स्ट) एफ.क्लोज ()#ओपन के साथ एक इनआउट फाइल बनाएं फ़ाइल को रीड मोड में खुले (input_file, 'r') के रूप में f:साथ mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) के रूप में m:print(f"आउटपुट \n*** आउटपुट पहले {input_file} के 5 बाइट्स {m.read(5)} ")print(f"*** आउटपुट {input_file} के अगले 10 बाइट्स {m.read(10)} ")
हैं

आउटपुट

*** इनपुट के पहले 5 बाइट्स आउटपुट करें। 

3.हमने फाइल को पढ़ लिया है और मेमोरी में मैप किया है और पहले 5 बाइट्स को पढ़ने के लिए .read() का इस्तेमाल किया है। तो फ़ाइल पॉइंटर पहले पढ़ने के बाद 10 बाइट्स से आगे बढ़ता है। अब यदि आप एक और रीड करते हैं तो मान लें कि रीड(10) बाइट्स यह आपको 6 - 15 से बाइट्स देता है।

4. मेमोरी मैप की गई फ़ाइल को अपडेट करने के लिए सेट करने के लिए, इसे मैप करने से पहले इसे 'r+' ('w' नहीं) के लिए खोलें।

मैं आपको एक उदाहरण के साथ दिखाऊंगा कि कैसे एक लाइन के हिस्से को इन-प्लेस संशोधित किया जाए।

आयात करें )# वर्डवर्ड =b'ipsum'# संशोधित वर्डमोडिफाइड_वर्ड =वर्ड[::-1]# ओपन (इनपुट_कॉपी, 'आर+') के साथ अपडेट प्राप्त करने के लिए फाइल को एफ के रूप में खोलें:एमएमएपी के साथ।एमएमएपी(f.fileno(), 0) as m:print(f"output \n *** Updates से पहले लाइन \n {m.readline().rstrip()}")# Seekm.seek(0)# का उपयोग करके रिवाइंड करें और itloc =m को उल्टा करें। find(word)m[loc:loc + len(word)] =modified_wordm.flush()# Seem.seek(0)print(f" \n *** अपडेट के बाद लाइन \n {m.readline() का उपयोग करके रिवाइंड करें .rstrip()}")f.seek(0)print(f" \n *** अंतिम फ़ाइल \n {f.readline().rstrip()}")

आउटपुट

*** अपडेट से पहले की लाइनb'Lorem ipsum dolor सिट amet, causae apeirian ea his, duo cu congue prodesset। यूट एपिकुरी इनवेनियर डुओ, नोवम राइड्स ईयू हैज़, इन नेटम मेलियोर नोलुइस सी। ईई स्टेट स्पष्टीकरण है। नो नेम इरमॉड डिटर्रुइसेट, नुसक्वाम इलेक्ट्रम रतिनिबस एड सी, इंटरसेट डेलिकाटिसिमी एट सिट। पुर्तो मोलेस्टिया क्यू ईम, प्रति हिंक पेरिकुलिस इंटेलेगाम में।'*** अपडेट के बाद की रेखाबी'लोरेम मुस्पी डोलर सिट आमेट, कॉसे एपीरियन ईए हिज, डुओ क्यू कॉन्गू प्रोडेसेट। यूट एपिकुरी इनवेनियर डुओ, नोवम राइड्स ईयू हैज़, इन नेटम मेलियोर नोलुइस सी। ईई स्टेट स्पष्टीकरण है। नो नेम इरमॉड डिटर्रुइसेट, नुसक्वाम इलेक्ट्रम रतिनिबस एड सी, इंटरसेट डेलिकाटिसिमी एट सिट। पर्टो मोलेस्टिया क्यू ईयूएम, प्रति हिंक पेरिकुलिस इंटेलेगाम में।'*** फाइनल फाइललोरेम मस्पी डोलर सिट आमेट, कॉसे एपीरियन ईए हिज, डुओ क्यू कॉन्गू प्रोडेसेट। यूट एपिकुरी इनवेनियर डुओ, नोवम राइड्स ईयू हैज़, इन नेटम मेलियोर नोलुइस सी। ईई स्टेट स्पष्टीकरण है। नो नेम इरमॉड डिटर्रुइसेट, नुसक्वाम इलेक्ट्रम रतिनिबस एड सी, इंटरसेट डेलिकाटिसिमी एट सिट। पुर्तो मोलेस्टिया क्यू ईम, प्रति हिंक पेरिकुलिस इंटेलेगाम में।

5. "ipsum" शब्द को मेमोरी में और फ़ाइल में पहली पंक्ति के बीच में बदल दिया जाता है।

6.यदि, किसी भी कारण से आप मेमोरी में परिवर्तन देखना चाहते हैं और डिस्क पर फ़ाइल को अपडेट नहीं करना चाहते हैं, तो ACCESS_COPY का उपयोग करें।

आयात करें )# वर्डवर्ड =b'ipsum'# संशोधित वर्डमोडिफाइड_वर्ड =वर्ड[::-1]# ओपन (इनपुट_कॉपी, 'r+') के साथ अपडेट प्राप्त करने के लिए फाइल को f:with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_COPY) के रूप में m:print(f"output \n *** अपडेट से पहले की लाइन \n {m.readline().rstrip()}")# Seekm.seek(0)# का उपयोग करके रिवाइंड करें। और रिवर्स itloc =m.find(word)m[loc:loc + len(word)] =modified_wordm.flush()# Seem.seek(0)print(f" \n *** अपडेट के बाद लाइन \n का उपयोग करके रिवाइंड करें {m.readline().rstrip()}")f.seek(0)print(f" \n *** अंतिम फ़ाइल \n {f.readline().rstrip()}")

आउटपुट

*** अपडेट से पहले की लाइनb'Lorem ipsum dolor सिट amet, causae apeirian ea his, duo cu congue prodesset। यूट एपिकुरी इनवेनियर डुओ, नोवम राइड्स ईयू हैज़, इन नेटम मेलियोर नोलुइस सी। ईई स्टेट स्पष्टीकरण है। नो नेम इरमॉड डिटर्रुइसेट, नुसक्वाम इलेक्ट्रम रतिनिबस एड सी, इंटरसेट डेलिकाटिसिमी एट सिट। पुर्तो मोलेस्टिया क्यू ईम, प्रति हिंक पेरिकुलिस इंटेलेगाम में।'*** अपडेट के बाद की रेखाबी'लोरेम मुस्पी डोलर सिट आमेट, कॉसे एपीरियन ईए हिज, डुओ क्यू कॉन्गू प्रोडेसेट। यूट एपिकुरी इनवेनियर डुओ, नोवम राइड्स ईयू हैज़, इन नेटम मेलियोर नोलुइस सी। ईई स्टेट स्पष्टीकरण है। नो नेम इरमॉड डिटर्रुइसेट, नुसक्वाम इलेक्ट्रम रतिनिबस एड सी, इंटरसेट डेलिकाटिसिमी एट सिट। पर्टो मोलेस्टिया क्यू ईयूएम, प्रति हिंक पेरिकुलिस इंटेलेगाम में।'*** फाइनल फाइललोरेम इप्सम डोलर सिट एमेट, कॉसे एपीरियन ईए हिज़, डुओ क्यू कॉन्गू प्रोडेसेट। यूट एपिकुरी इनवेनियर डुओ, नोवम राइड्स ईयू हैज़, इन नेटम मेलियोर नोलुइस सी। ईई स्टेट स्पष्टीकरण है। नो नेम इरमॉड डिटर्रुइसेट, नुसक्वाम इलेक्ट्रम रतिनिबस एड सी, इंटरसेट डेलिकाटिसिमी एट सिट। पुर्तो मोलेस्टिया क्यू ईम, प्रति हिंक पेरिकुलिस इंटेलेगाम में।

7. निरीक्षण, इनपुट और आउटपुट में सामग्री जो अपरिवर्तित हैं, जबकि परिवर्तन केवल इन-मेमोरी पर लागू होते हैं।


  1. एक नई फाइल सिस्टम के साथ विंडोज के प्रदर्शन में सुधार कैसे करें

    अपने विंडोज पीसी को बीफ करना चाहते हैं? आप दो तकनीकों के साथ सॉफ़्टवेयर प्रदर्शन और संग्रहण विश्वसनीयता को बढ़ावा दे सकते हैं:इंडिपेंडेंट ड्राइव्स (RAID) और Microsoft के रेजिलिएंट फ़ाइल सिस्टम (ReFS) के रिडंडेंट एरे। केवल आवश्यकता है, कम से कम, दो अतिरिक्त ड्राइव। क्या आप सोच रहे हैं कि क्या आरईएफए

  1. पायथन में def के साथ परिभाषित फ़ंक्शन को कैसे प्लॉट करें? (मैटप्लोटलिब)

    पायथन में def के साथ परिभाषित एक फ़ंक्शन को प्लॉट करने के लिए, हम निम्नलिखित कदम उठा सकते हैं - आकृति का आकार सेट करें और सबप्लॉट के बीच और आसपास पैडिंग समायोजित करें। def, . का उपयोग करके एक उपयोगकर्ता-परिभाषित फ़ंक्शन बनाएं यानी, f(x). बनाएं x डेटा अंक numpy का उपयोग कर रहे हैं। प्लॉट x और f(x)

  1. Askaveasfile () पायथन टिंकर में फ़ंक्शन

    TKinter एक Python मॉड्यूल है जिसका उपयोग Python में GUI प्रोग्रामिंग के लिए किया जाता है। हम एक कैनवास बनाते हैं और अपने UI घटकों को उसमें कई गुणों और व्यवहारों के साथ रखते हैं। इस लेख में, हम देखेंगे कि स्थानीय ड्राइव में पायथन प्रोग्राम के माध्यम से बनाई गई फ़ाइलों को सहेजने के लिए आस्क निबंध फ़ाइ