কম্পিউটার টিউটোরিয়াল

পাইথন পিকলিং (Pickling) - অবজেক্ট সিরিয়ালাইজেশন


পাইথনের pickle মডিউলটি পাইথন অবজেক্ট স্ট্রাকচার সিরিয়ালাইজ (serialize) এবং ডি-সিরিয়ালাইজ (de-serialize) করতে ব্যবহৃত হয়। যেকোনো পাইথন অবজেক্ট (লিস্ট, ডিক্ট ইত্যাদি) কে বাইট স্ট্রিম (0 এবং 1) এ রূপান্তর করার প্রক্রিয়াকে পিকলিং (pickling) বা সিরিয়ালাইজেশন (serialization) বা ফ্ল্যাটেনিং (flattening) বা মার্শালিং (marshalling) বলা হয়। পিকলিং द्वारा জেনারেট করা বাইট স্ট্রিমকে আবার পাইথন অবজেক্টে রূপান্তর করার প্রক্রিয়াকে আনপিকলিং (unpickling) বলা হয়।

কেন পিকল (Pickle)?: বাস্তব বিশ্বে, পিকলিং এবং আনপিকলিং-এর ব্যবহার ব্যাপক কারণ এগুলো আমাদের সহজে ডেটা এক সার্ভার/সিস্টেম থেকে অন্য সার্ভার/সিস্টেমে ট্রান্সফার করে ফাইল বা ডেটাবেসে স্টোর করতে দেয়।

সতর্কতা: অনবিশ্বস্ত সোর্স থেকে পাওয়া ডেটা আনপিকল (unpickle) করা উচিত নয় কারণ সেগুলো সিকিউরিটি হুমকি দাঁড়াতে পারে। যাইহোক, pickle মডিউলে ম্যালিশিয়াস ডেটা পিকলিং করার সময় জানতে বা অ্যালার্ম বাজাতে কোনো উপায় নেই।

শুধু pickle মডিউল ইম্পোর্ট করার পরেই আমরা পিকলিং এবং আনপিকলিং করতে পারি। ইম্পোর্ট করার কমান্ড:

import pickle

পিকল উদাহরণ:

নিচে একটি লিস্ট পিকল করার সহজ প্রোগ্রাম দেওয়া হলো:

একটি সিম্পল লিস্ট পিকল করা: Pickle_list1.py

import pickle
mylist = ['a', 'b', 'c', 'd']
with open('datafile.txt', 'wb') as fh:
    pickle.dump(mylist, fh)

উপরের কোডে, লিস্ট - "mylist" চারটি এলিমেন্ট ('a', 'b', 'c', 'd') ধারণ করে। আমরা ফাইলটি "wb" মোডে খুলেছি "w" মোডের বদলে কারণ সব অপারেশন বাইটস ব্যবহার করে বর্তমান ওয়ার্কিং ডিরেক্টরিতে করা হয়। "datafile.txt" নামে একটি নতুন ফাইল তৈরি হয়, যা mylist ডেটাকে বাইট স্ট্রিমে রূপান্তর করে।

একটি সিম্পল লিস্ট আনপিকল করা: unpickle_list1.py

import pickle
pickle_off = open("datafile.txt", "rb")
emp = pickle.load(pickle_off)
print(emp)

আউটপুট: উপরের স্ক্রিপ্টগুলো রান করলে আপনি আউটপুট হিসেবে আপনার mylist ডেটা আবার দেখতে পাবেন।

['a', 'b', 'c', 'd']

একটি সিম্পল ডিকশনারি পিকল করা:

import pickle
EmpID = {1:"Zack", 2:"53050", 3:"IT", 4:"38", 5:"Flipkart"}
pickling_on = open("EmpID.pickle", "wb")
pickle.dump(EmpID, pickling_on)
pickling_on.close()

ডিকশনারি আনপিকল করা:

import pickle
pickle_off = open("EmpID.pickle", 'rb')
EmpID = pickle.load(pickle_off)
print(EmpID)

উপরের স্ক্রিপ্ট (আনপিকল) রান করলে আমরা আমাদের ডিকশনারি আবার পেয়ে যাবো जैसा أننا এarlier ইনিশিয়ালাইজ করেছিলাম। দয়া করে লক্ষ্য করুন কারণ আমরা বাইটস পড়ছি, আমরা "rb" ব্যবহার করেছি "r" এর বদলে।

আউটপুট

{1: 'Zack', 2: '53050', 3: 'IT', 4: '38', 5: 'Flipkart'}

পিকল এক্সেপশন (Pickle Exceptions)

পিকল মডিউল ডিল করার সময় নিচের কিছু কমন এক্সেপশন রেইজ হয়:

  • Pickle.PicklingError: যদি পিকল অবজেক্ট পিকলিং সাপোর্ট না করে, তবে এই এক্সেপশন রেইজ হয়।

  • Pickle.UnpicklingError: যদি ফাইলে খারাপ বা করাপ্ট ডেটা থাকে।

  • EOFError: যদি ফাইলের শেষ (end of file) ডিটেক্ট হয়।

সুবিধা (Pros):

  • জটিল ডেটা সংরক্ষণে খুব কাজে আসে।

  • ব্যবহার সহজ, লাইটওয়েট এবং কয়েক লাইন কোডের প্রয়োজন।

  • জেনারেট হওয়া পিকল্ড ফাইল সহজে পড়া যায় না এবং তাই কিছু সিকিউরিটি প্রদান করে।

অসুবিধা (Cons):

  • পাইথন ছাড়া অন্যান্য ল্যাঙ্গুয়েজ পিকল্ড পাইথন অবজেক্ট রিকন্সট্রাক্ট করতে পারে না।

  • ম্যালিশিয়াস সোর্স থেকে ডেটা আনপিকল করার রিস্ক রয়েছে।

  1. পাইথন: Bokeh লাইব্রেরি দিয়ে ডেটা ভিজ্যুয়ালাইজেশন

  2. পাইথনে স্ট্যাটিস্টিক্যাল থিংকিং (Statistical Thinking)

  3. পাইথনে কাস্টমার চার্ন প্রিডিকশন (Predicting Customer Churn)

  4. পাইথনে সেন্সাস ডেটা অ্যানালাইসিস (Analyzing Census Data)