পাইথনে একটি ফাইলের তালিকা পড়া এবং লেখা

ভূমিকা

পাইথন প্রোগ্রামাররা সিরিয়ালাইজড ডেটা স্ট্রাকচার হিসাবে নিবিড়ভাবে অ্যারে, তালিকা এবং অভিধান ব্যবহার করে। এই ডেটা স্ট্রাকচারগুলিকে ক্রমাগতভাবে সংরক্ষণ করার জন্য সঠিকভাবে কাজ করার জন্য একটি ফাইল বা একটি ডাটাবেসের প্রয়োজন হয়।

এই নিবন্ধে, আমরা কীভাবে ফাইলে একটি তালিকা লিখতে হয় এবং কীভাবে সেই তালিকাটি মেমরিতে আবার পড়তে হয় তা দেখব।

থেকে একটি ফাইলে ডেটা লিখুন, এবং একটি ফাইল থেকে ডেটা পড়ুন, পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজ স্ট্যান্ডার্ড পদ্ধতি অফার করে write() এবং read() একটি একক লাইন সঙ্গে ডিল করার জন্য, সেইসাথে writelines() এবং readlines() একাধিক লাইনের সাথে ডিল করার জন্য। উপরন্তু, উভয় pickle এবং json মডিউলগুলি সিরিয়ালাইজড ডেটা সেটগুলির সাথেও ডিল করার চতুর উপায়গুলিকে অনুমতি দেয়।

উপরের পড়ুন () এবং লিখুন () পদ্ধতি

মৌলিক অক্ষর (স্ট্রিং) মোকাবেলা করতে read() এবং write() পদ্ধতি চমৎকারভাবে কাজ করে। ফাইলের মধ্যে লাইন দ্বারা লাইন যেমন একটি তালিকা সংরক্ষণ করা listfile.txt নিম্নলিখিত হিসাবে করা যেতে পারে:


places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    for listitem in places:
        filehandle.write(f'{listitem}n')

সার্জারির listitem একটি লাইন বিরতি দ্বারা প্রসারিত হয় "n", প্রথমে, এবং তারপর আউটপুট ফাইলে সংরক্ষণ করা হয়। এখন আমরা ফাইলটি থেকে সম্পূর্ণ তালিকাটি কীভাবে পড়তে হয় তা দেখতে পারি listfile.txt স্মৃতিতে ফিরে:


places = []


with open('listfile.txt', 'r') as filehandle:
    for line in filehandle:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

মনে রাখবেন যে আপনাকে স্ট্রিংয়ের শেষ থেকে লাইন ব্রেকটি সরাতে হবে। এই ক্ষেত্রে, এটি আমাদের সাহায্য করে যে পাইথন স্ট্রিংগুলিতেও তালিকা পরিচালনার অনুমতি দেয়। এই অপসারণটি কেবল স্ট্রিং-এ একটি তালিকা অপারেশন হিসাবে করা হয়, যা শেষ উপাদান ছাড়া সবকিছু রাখে। এই উপাদান অক্ষর ধারণ করে "n" যা ইউনিক্স/লিনাক্স সিস্টেমে লাইন ব্রেক প্রতিনিধিত্ব করে।

উপরের লেখার লাইন() এবং রিডলাইন() পদ্ধতি

এই নিবন্ধের শুরুতে উল্লিখিত হিসাবে, পাইথনে দুটি পদ্ধতি রয়েছে - writelines() এবং readlines() - যথাক্রমে এক ধাপে একাধিক লাইন লিখতে এবং পড়তে। ডিস্কের একটি ফাইলে পুরো তালিকাটি লিখুন:


places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.txt', 'w') as filehandle:
    filehandle.writelines(f"{place for place in places_list}n")

ডিস্কের একটি ফাইল থেকে সম্পূর্ণ তালিকাটি পড়তে আমাদের প্রয়োজন:


places = []


with open('listfile.txt', 'r') as filehandle:
    filecontents = filehandle.readlines()
    for line in filecontents:
        
        curr_place = line[:-1]
        
        places.append(curr_place)

উপরের কোডটি অন্যান্য প্রোগ্রামিং ভাষা থেকে ধার করা আরও ঐতিহ্যবাহী পদ্ধতি অনুসরণ করে। এর আরো একটি লিখুন পাইথনিক পথ:


places = []


with open('listfile.txt', 'r') as filehandle:
    places = [current_place.rstrip() for current_place in filehandle.readlines()]

প্রথমত, ফাইলের বিষয়বস্তু এর মাধ্যমে পড়া হয় readlines(). দ্বিতীয়ত, ক for প্রতিটি লাইন থেকে লুপ লাইন ব্রেক অক্ষর ব্যবহার করে সরানো হয় rstrip() পদ্ধতি তৃতীয়ত, স্ট্রিংটি একটি নতুন তালিকা আইটেম হিসাবে স্থানের তালিকায় যোগ করা হয়েছে।

তালিকার সাথে তুলনা করার আগে কোডটি অনেক বেশি কম্প্যাক্ট, কিন্তু নতুন পাইথন প্রোগ্রামারদের জন্য এটি পড়া আরও কঠিন হতে পারে।

Joblib মডিউল ব্যবহার করে

প্রাথমিক পদ্ধতিগুলি এখন পর্যন্ত এমনভাবে তালিকাটি সংরক্ষণ করা হয়েছে যাতে মানুষ এখনও এটি পড়তে পারে - বেশ আক্ষরিক অর্থে একটি ফাইলের একটি অনুক্রমিক তালিকা। এটি সাধারণ প্রতিবেদন তৈরি বা CSV ফাইলের মতো ব্যবহারকারীদের আরও ব্যবহারের জন্য এক্সপোর্ট ফাইল আউটপুট করার জন্য দুর্দান্ত। যাইহোক - যদি আপনার উদ্দেশ্য হয় শুধুমাত্র একটি তালিকাকে একটি ফাইলে সিরিয়ালাইজ করা, যেটি পরে লোড করা যেতে পারে, তাহলে এটিকে মানব-পাঠযোগ্য বিন্যাসে সংরক্ষণ করার দরকার নেই।

সার্জারির joblib মডিউল পাইথন অবজেক্ট ডাম্প করার সবচেয়ে সহজ উপায় প্রদান করে (সত্যিই যেকোন বস্তু হতে পারে):

import joblib

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

joblib.dump(places, 'places.sav')

places = joblib.load('places.sav')
print(places) 

joblib একটি দক্ষ বিন্যাসে অবজেক্টগুলিকে সিরিয়ালাইজ করার এবং পরে সেগুলি লোড করার সবচেয়ে সহজ এবং পরিষ্কার উপায় রয়েছে। আপনি যে কোনো নির্বিচারে বিন্যাস ব্যবহার করতে পারেন, যেমন .sav, .data, ইত্যাদি। এটা আসলে কোন ব্যাপার না – উভয়ই joblib এবং বিকল্প মত pickle ফাইলগুলো ঠিকঠাক পড়বে।

উপরের জরান মডিউল

বিকল্প হিসাবে joblib, আমরা ব্যবহার করতে পারি pickle! এর dump() পদ্ধতিটি একটি বাইনারি ডেটা স্ট্রিম হিসাবে দক্ষতার সাথে তালিকা সংরক্ষণ করে। প্রথমত, আউটপুট ফাইল listfile.data বাইনারি লেখার জন্য খোলা হয় ("wb") দ্বিতীয়ত, তালিকাটি ব্যবহার করে খোলা ফাইলে সংরক্ষণ করা হয় dump() পদ্ধতি:

import pickle

places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow']

with open('listfile.data', 'wb') as filehandle:
    
    pickle.dump(places, filehandle)

পরবর্তী ধাপ হিসাবে, আমরা ফাইল থেকে তালিকাটি নিম্নরূপ পড়ি। প্রথমত, আউটপুট ফাইল listfile.data পড়ার জন্য বাইনারি খোলা হয় ("rb") দ্বিতীয়ত, স্থানের তালিকা ফাইলটি ব্যবহার করে লোড করা হয় load() পদ্ধতি:

import pickle

with open('listfile.data', 'rb') as filehandle:
    
    placesList = pickle.load(filehandle)

এখানে দুটি উদাহরণ স্ট্রিং এর ব্যবহার প্রদর্শন করে। যদিও, pickle সমস্ত ধরণের পাইথন অবজেক্টের সাথে কাজ করে যেমন স্ট্রিং, সংখ্যা, স্ব-সংজ্ঞায়িত কাঠামো এবং পাইথন সরবরাহ করে অন্য সমস্ত বিল্ট-ইন ডেটা স্ট্রাকচার।

JSON ফরম্যাট ব্যবহার করে

বাইনারি ডেটা বিন্যাস pickle ব্যবহারগুলি পাইথনের জন্য নির্দিষ্ট। বিভিন্ন প্রোগ্রামের মধ্যে ইন্টারঅপারেবিলিটি উন্নত করতে জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (তাদেরকে JSON) একটি সহজে-ব্যবহারযোগ্য এবং মানব-পঠনযোগ্য স্কিমা প্রদান করে, এবং এইভাবে ফাইলগুলিকে সিরিয়ালাইজ করার এবং API-এর মাধ্যমে ভাগ করার জন্য খুব জনপ্রিয় হয়ে উঠেছে।

সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি আউটপুট ফাইল ব্যবহার করে মিশ্র ভেরিয়েবল প্রকারের একটি তালিকা লিখতে হয় JSON মডিউল লেখার জন্য আউটপুট ফাইল খোলার পরে, dump() পদ্ধতি JSON স্বরলিপি ব্যবহার করে ফাইলে মৌলিক তালিকা সংরক্ষণ করে:

import json


basic_list = [1, "Cape Town", 4.6]


with open('listfile.txt', 'w') as filehandle:
    json.dump(basic_list, filehandle)

মেমরিতে আউটপুট ফাইলের বিষয়বস্তু পড়া ডেটা লেখার মতোই সহজ। সংশ্লিষ্ট পদ্ধতি dump() নামকরণ করা হয় load():

import json


with open('listfile.txt', 'r') as filehandle:
    basic_list = json.load(filehandle)

উপসংহার

পিকল এবং JSON ব্যবহার করে বাইনারি স্ট্রীমের মাধ্যমে ডাম্পিং/লোড করা পর্যন্ত সাধারণ লেখা/পড়া ডেটা থেকে শুরু করে আমরা উপরে দেখানো বিভিন্ন পদ্ধতি। এটি একটি তালিকা ক্রমাগতভাবে সংরক্ষণ করা এবং মেমরিতে এটিকে পড়া সহজ করে।

সময় স্ট্যাম্প:

থেকে আরো Stackabuse