আপনি যখন পাইথন প্রোগ্রামে একটি ফাইল অবজেক্ট পড়েন এবং পরিবর্তন করতে চান, তখন এটি দুটি উপায়ে করা যেতে পারে। প্রথম উপায় হল ফাইলটি অবস্থিত ফিজিক্যাল স্টোরেজ ড্রাইভে বিষয়বস্তু পরিবর্তন করা এবং দ্বিতীয় উপায় হল সিস্টেমের মেমরি বা রাম-এ সরাসরি এটি পরিবর্তন করা। এই নিবন্ধে আমরা পাইথনে উপলব্ধ mmap মডিউল ব্যবহার করে একটি ফাইল অবজেক্টের বিষয়বস্তু কীভাবে পড়তে, অনুসন্ধান এবং পরিবর্তন করতে হয় তা দেখব। একটি ফাইলকে ওপেন, রিড এবং লাইক করার মতো সিস্টেম কল করার পরিবর্তে, মেমরি-ম্যাপিং ফাইলের ডেটা মেমরিতে রাখে যা আপনাকে মেমরিতে ফাইলগুলিকে সরাসরি ম্যানিপুলেট করতে দেয়৷
মেমরি ম্যাপ করা ফাইল পড়ুন
নীচের উদাহরণে আমরা একবারে মেমরিতে একটি সম্পূর্ণ ফাইল পড়ি এবং এটিকে একটি ফাইল অবজেক্ট হিসাবে মেমরিতে রাখি। তারপর আমরা এটি রিড মোডে অ্যাক্সেস করি। অবশেষে আপনি দেখতে পাচ্ছেন যে সম্পূর্ণ ফাইলটি একটি বস্তুর প্রতিনিধিত্ব করে যেখান থেকে আমরা প্রয়োজনীয় পাঠ্য পেতে নির্দিষ্ট অবস্থানগুলিকে স্লাইস করি।
উদাহরণ
ইম্পোর্ট করুন mmapdef read_mmap(fname):open(fname, mode="r", encoding="utf8") fobj হিসাবে:mmap.mmap(fobj.fileno(), length=0, access=mmap.ACCESS_READ সহ ) mmap_obj হিসাবে:print(mmap_obj[4:26])read_mmap('E:\\test.txt')
আউটপুট
উপরের কোডটি চালানো আমাদের নিম্নলিখিত ফলাফল দেয় -
'বায়বীয় থেকে নির্গমন'
mmap ব্যবহার করে খুঁজুন
উদাহরণ
import mmapimport timedef regular_io_find(fname):open(fname, mode="r", encoding="utf-8") দিয়ে fobj:text =fobj.read() text.find("Death")def mmap_io_find (fname):fobj হিসাবে open(fname, mode="r", encoding="utf-8") সহ:mmap.mmap(fobj.fileno(), length=0, access=mmap.ACCESS_READ) mmap_obj হিসাবে:mmap_obj.find(b"Death")start_time_r =time.time()regular_io_find('E:\\emissions.txt')end_time_r =time.time()print("Regualr read start time :",start_time_r)print(" নিয়মিত পড়ার শুরুর সময় :", end_time_r)মুদ্রণ('নিয়মিত পড়ার সময় :{0}'.ফর্ম্যাট(end_time_r - start_time_r))start_time_m =time.time()mmap_io_find('E:\\emissions.txt')end_time_m =সময় .time()print("mmap read start time :",start_time_m)print("mmap read start time :",end_time_m)print('mmap পড়ার সময় :{0}'.format(end_time_m - start_time_m))
আউটপুট
উপরের কোডটি চালানো আমাদের নিম্নলিখিত ফলাফল দেয় -
ফাইলে লেখা
নীচের উদাহরণে আমরা একটি ফাইল নিই এবং এটিকে r+ হিসাবে অ্যাক্সেস কোড সহ mmap মডিউল দিয়ে খুলি যা ফাইলটি পড়া এবং লেখা উভয়ই অনুমতি দেয়। ফাইল অবজেক্ট তৈরি করার পরে আমরা স্লাইস করে একটি অবস্থান বেছে নিই যেখানে আমরা একটি স্ট্রিং লিখতে পারি।
উদাহরণ
import mmapdef mmap_io_write(fname):open(fname, mode="r+") দিয়ে fobj:mmap.mmap(fobj.fileno(), length=0, access=mmap.ACCESS_WRITE) mmap_obj হিসেবে:mmap_obj[ 20:26] =b"হ্যালো!" mmap_obj.flush()mmap_io_write('E:\\emissions.txt')
উপরের কোডটি চালানোর সময় আমরা ফাইলটি খুলতে পারি এবং স্ট্রিংটি দেখতে পারি Hello! 20 থেকে 26 পর্যন্ত বাইট অবস্থানে ফাইলে লেখা।