जब आप किसी फ़ाइल ऑब्जेक्ट को पायथन प्रोग्राम में पढ़ते हैं और इसे संशोधित करना चाहते हैं, तो यह दो तरीकों से किया जा सकता है। पहला तरीका है उस भौतिक स्टोरेज ड्राइव पर सामग्री को संशोधित करना जहां फ़ाइल स्थित है और दूसरा तरीका है सिस्टम की मेमोरी या रैम में सीधे इसे संशोधित करना। इस लेख में हम देखेंगे कि mmap मॉड्यूल का उपयोग करके फ़ाइल ऑब्जेक्ट की सामग्री को कैसे पढ़ें, खोजें और संशोधित करें। सिस्टम कॉल जैसे open, read और lseek के बजाय, मेमोरी-मैपिंग फ़ाइल के डेटा को मेमोरी में रखता है जो आपको मेमोरी में सीधे फ़ाइलों को हेरफेर करने की अनुमति देता है।
मेमोरी मैप्ड फ़ाइल पढ़ें
नीचे दिए गए उदाहरण में हम एक पूरी फ़ाइल को एक बार में मेमोरी में पढ़ते हैं और इसे मेमोरी में फ़ाइल ऑब्जेक्ट के रूप में रखते हैं। फिर हम इसे रीड मोड में एक्सेस करते हैं। अंत में जैसा कि आप देख सकते हैं पूरी फ़ाइल एक ऑब्जेक्ट को दर्शाती है जिससे हम आवश्यक टेक्स्ट प्राप्त करने के लिए कुछ स्थितियों को स्लाइस करते हैं।
उदाहरण
import mmap
def read_mmap(fname):
with open(fname, mode="r", encoding="utf8") as fobj:
with mmap.mmap(fobj.fileno(), length=0, access=mmap.ACCESS_READ) as mmap_obj:
print(mmap_obj[4:26])
read_mmap('E:\\test.txt')
आउटपुट
'emissions from gaseous'
mmap का उपयोग करके खोजें
उदाहरण
import mmap
import time
def regular_io_find(fname):
with open(fname, mode="r", encoding="utf-8") as fobj:
text = fobj.read()
text.find("Death ")
def mmap_io_find(fname):
with open(fname, mode="r", encoding="utf-8") as fobj:
with mmap.mmap(fobj.fileno(), length=0, access=mmap.ACCESS_READ) as mmap_obj:
mmap_obj.find(b"Death ")
start_time_r = time.time()
regular_io_find('E:\\emissions.txt')
end_time_r = time.time()
print("Regular read start time :", start_time_r)
print("Regular read end time :", end_time_r)
print('Regular read time : {0}'.format(end_time_r - start_time_r))
start_time_m = time.time()
mmap_io_find('E:\\emissions.txt')
end_time_m = time.time()
print("mmap read start time :", start_time_m)
print("mmap read end time :", end_time_m)
print('mmap read time : {0}'.format(end_time_m - start_time_m))
आउटपुट
Regular read start time : 1609812463.2718163 Regular read end time : 1609812463.2783241 Regular read time to find: 0.00650787353515625 mmap read start time : 1609812463.2783241 mmap read end time : 1609812463.2783241 mmap read time to find : 0.0
फ़ाइल में लिखना
नीचे दिए गए उदाहरण में हम एक फ़ाइल लेते हैं और इसे mmap मॉड्यूल के साथ access कोड r+ के साथ खोलते हैं जो फ़ाइल को पढ़ने और लिखने दोनों की अनुमति देता है। फ़ाइल ऑब्जेक्ट बनाने के बाद हम स्लाइसिंग द्वारा एक स्थिति चुनते हैं जहां हम एक स्ट्रिंग लिख सकते हैं।
उदाहरण
import mmap
def mmap_io_write(fname):
with open(fname, mode="r+") as fobj:
with mmap.mmap(fobj.fileno(), length=0, access=mmap.ACCESS_WRITE) as mmap_obj:
mmap_obj[20:26] = b"Hello!"
mmap_obj.flush()
mmap_io_write('E:\\emissions.txt')
उपरोक्त कोड चलाने पर हम फ़ाइल खोलकर बाइट स्थिति 20 से 26 पर लिखी गई स्ट्रिंग Hello! देख सकते हैं।