pprint মডিউল (lib/pprint.py) পাইথনের স্ট্যান্ডার্ড লাইব্রেরির একটি অংশ যা স্ট্যান্ডার্ড পাইথন ডিস্ট্রিবিউশনের সাথে বিতরণ করা হয়। pprint নামটি pretty printer-এর সংক্ষিপ্ত রূপ। pprint মডিউলের ফাংশনালিটি পাইথন ডেটা স্ট্রাকচারের সুন্দর এবং সুন্দর চেহারা প্রদান করতে সক্ষম করে। যেকোনো ডেটা স্ট্রাকচার যা পাইথন ইন্টারপ্রেটার দ্বারা সঠিকভাবে পার্স করা যায়, তা শোভনভাবে ফরম্যাট করা হয়। ফরম্যাটেড এক্সপ্রেশন যতদূর সম্ভব এক লাইনে রাখা হয়, কিন্তু যদি দৈর্ঘ্য width প্যারামিটার অতিক্রম করে তবে মাল্টিপল লাইনে ভাঙা হয়। pprint আউটপুটের একটি অনন্য বৈশিষ্ট্য হলো ডিকশনারিগুলো প্রদর্শন করার আগে স্বয়ংক্রিয়ভাবে সোর্ট করা হয়।
pprint মডিউলে PrettyPrinter ক্লাসের সংজ্ঞা রয়েছে। এর কনস্ট্রাক্টর নিচের ফরম্যাট নেয়:
pprint.PrettyPrinter(indent, width, depth, stream, compact)
- indent প্যারামিটার প্রতিটি রিকার্সিভ লেভেলে যোগ হওয়া ইন্ডেন্টেশন সংজ্ঞায়িত করে। ডিফল্ট ১।
- width প্যারামিটার ডিফল্টভাবে ৮০। ডিজায়ারড আউটপুট এই মান দ্বারা সীমাবদ্ধ। দৈর্ঘ্য width-এর চেয়ে বড় হলে, এটি মাল্টিপল লাইনে ভাঙা হয়।
- depth প্যারামিটার প্রিন্ট করা লেভেলের সংখ্যা নিয়ন্ত্রণ করে।
- stream প্যারামিটার ডিফল্টভাবে std.out − ডিফল্ট আউটপুট ডিভাইস। এটি যেকোনো স্ট্রিম অবজেক্ট নিতে পারে যেমন ফাইল।
- compact প্যারামিটার ডিফল্টভাবে False সেট থাকে। True হলে, width-এর মধ্যে ফিট হওয়া ডেটা মাত্র প্রদর্শিত হবে।
PrettyPrinter ক্লাস নিচের মেথডগুলো সংজ্ঞায়িত করে:
- pprint() − PrettyPrinter অবজেক্টের ফরম্যাটেড রিপ্রেজেন্টেশন প্রিন্ট করে
- pformat() − কনস্ট্রাক্টরের প্যারামিটারসহ অবজেক্টের ফরম্যাটেড রিপ্রেজেন্টেশন রিটার্ন করে।
সিম্পল উদাহরণ
নিচের উদাহরণ PrettyPrinter ক্লাসের সিম্পল ব্যবহার দেখায়।
import pprint
students = {
"Dilip": ["English", "Maths", "Science"],
"Raju": {"English": 50, "Maths": 60, "Science": 70},
"Kalpana": (50, 60, 70)
}
pp = pprint.PrettyPrinter()
print("normal print output")
print(students)
print("----")
print("pprint output")
pp.pprint(students)
আউটপুট নরমাল এবং প্রিটি প্রিন্ট ডিসপ্লে দেখায়।
normal print output
{'Dilip': ['English', 'Maths', 'Science'], 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}, 'Kalpana': (50, 60, 70)}
----
pprint output
{'Dilip': ['English', 'Maths', 'Science'], 'Kalpana': (50, 60, 70), 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}
pprint মডিউল সুবিধাজনক ফাংশন pprint() এবং pformat()ও সংজ্ঞায়িত করে যা PrettyPrinter মেথডের সাথে মিলে যায়। নিচের উদাহরণ pprint() ফাংশন ব্যবহার করে।
from pprint import pprint
students = {
"Dilip": ["English", "Maths", "Science"],
"Raju": {"English": 50, "Maths": 60, "Science": 70},
"Kalpana": (50, 60, 70)
}
print("normal print output")
print(students)
print("----")
print("pprint output")
pprint(students)
পরবর্তী উদাহরণ pformat() মেথড এবং pformat() ফাংশন উভয়ই ব্যবহার করে। pformat() মেথড ব্যবহার করতে, PrettyPrinter অবজেক্ট প্রথম সেট আপ করা হয়। উভয় কেসেই, ফরম্যাটেড রিপ্রেজেন্টেশন নরমাল print() ফাংশন ব্যবহার করে প্রদর্শন করা হয়।
import pprint
students = {
"Dilip": ["English", "Maths", "Science"],
"Raju": {"English": 50, "Maths": 60, "Science": 70},
"Kalpana": (50, 60, 70)
}
print("using pformat method")
pp = pprint.PrettyPrinter()
string = pp.pformat(students)
print(string)
print('------')
print("using pformat function")
string = pprint.pformat(students)
print(string)
উপরের কোডের আউটপুট:
using pformat method
{'Dilip': ['English', 'Maths', 'Science'], 'Kalpana': (50, 60, 70), 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}
------
using pformat function
{'Dilip': ['English', 'Maths', 'Science'], 'Kalpana': (50, 60, 70), 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}
কাস্টম ক্লাসের সাথে প্রিটি প্রিন্টার
প্রিটি প্রিন্টার কাস্টম ক্লাসের সাথে ব্যবহার করা যেতে পারে। ক্লাসের ভিতরে __repr__() মেথড ওভাররাইড করা হয়। __repr__() মেথড কল করা হয় যখন repr() ফাংশন ব্যবহার করা হয়। এটি পাইথন অবজেক্টের অফিসিয়াল স্ট্রিং রিপ্রেজেন্টেশন। যখন আমরা অবজেক্টকে print() ফাংশনের প্যারামিটার হিসেবে ব্যবহার করি, এটি repr() ফাংশনের রিটার্ন ভ্যালু প্রিন্ট করে।
নিচের উদাহরণে, __repr__() মেথড player অবজেক্টের স্ট্রিং রিপ্রেজেন্টেশন রিটার্ন করে।
import pprint
class player:
def __init__(self, name, formats=[], runs=[]):
self.name = name
self.formats = formats
self.runs = runs
def __repr__(self):
dct = {}
dct[self.name] = dict(zip(self.formats, self.runs))
return (repr(dct))
l1 = ['Tests', 'ODI', 'T20']
l2 = [[140, 45, 39], [15, 122, 36, 67, 100, 49], [78, 44, 12, 0, 23, 75]]
p1 = player("virat", l1, l2)
pp = pprint.PrettyPrinter()
pp.pprint(p1)
উপরের কোডের আউটপুট:
{'virat': {'Tests': [140, 45, 39], 'ODI': [15, 122, 36, 67, 100, 49], 'T20': [78, 44, 12, 0, 23, 75]}}
রিকার্সিভ ডেটা স্ট্রাকচার সাথে pprint
যখন আমরা একটি রিকার্সিভ অবজেক্ট pprint-এ প্রিন্ট করার চেষ্টা করি, শুধু প্রথম রিপ্রেজেন্টেশন দেখায় এবং পরবর্তী রিকার্সনের জন্য শুধু এর রেফারেন্স প্রিন্ট হয়।
>>> import pprint >>> numbers = list(range(1, 6)) >>> numbers.append(numbers) >>> print(numbers) [1, 2, 3, 4, 5, [...]] >>> pprint.pprint(numbers) [1, 2, 3, 4, 5,]
আউটপুট প্রস্থ সীমাবদ্ধ করা
যদি width প্যারামিটার ডিফল্ট ৮০ থেকে অন্য মান পরিবর্তন করা হয়, আউটপুট এমনভাবে ফরম্যাট করা হয় যাতে মাল্টিপল লাইন ডিসপ্লে হয় সিনট্যাক্স লঙ্ঘন না করে।
import pprint
students = {
"Dilip": ["English", "Maths", "Science"],
"Raju": {"English": 50, "Maths": 60, "Science": 70},
"Kalpana": (50, 60, 70)
}
pp = pprint.PrettyPrinter(width=20)
pp.pprint(students)
কোডটি এই আর্টিকেলের প্রথম উদাহরণের মতো। কিন্তু PrettyPrinter অবজেক্ট width প্যারামিটার ২০ দিয়ে কনস্ট্রাক্ট করা হয়েছে। অতএব pprint আউটপুট অনুযায়ী ফরম্যাটেড।
{'Dilip': [
'English',
'Maths',
'Science'],
'Kalpana': (50,
60,
70),
'Raju': {'English': 50,
'Maths': 60,
'Science': 70}}