CSV (কমা সেপারেটেড ভ্যালুস) ফরম্যাট স্প্রেডশিটের দ্বারা ব্যবহৃত একটি সাধারণ ডেটা ফরম্যাট। পাইথনের স্ট্যান্ডার্ড লাইব্রেরির csv মডিউল CSV ফাইলে পড়া/লেখা অপারেশন করার জন্য ক্লাস ও মেথড প্রদান করে।
writer() ফাংশন
csv মডিউলের এই ফাংশনটি একটি writer অবজেক্ট ফেরত দেয় যা ডেটাকে ডিলিমিটেড স্ট্রিং-এ রূপান্তর করে ফাইল অবজেক্টে সংরক্ষণ করে। ফাংশনটি লিখার অনুমতিপ্রাপ্ত একটি ফাইল অবজেক্ট প্যারামিটার হিসেবে নেয়। ফাইলে লেখা প্রতিটি সطر একটি নিউলাইন ক্যারেক্টার ইস্যু করে। লাইনগুলোর মাঝে অতিরিক্ত স্পেস রোধ করতে newline প্যারামিটার '' সেট করা হয়।
writer ক্লাসের নিচের মেথডগুলো রয়েছে:
writerow() মেথড
এই ফাংশনটি একটি Iterable (লিস্ট, টাপল বা স্ট্রিং)-এর আইটেমগুলো কমা দিয়ে পৃথক করে লেখে।
writerows() মেথড
এই ফাংশনটি Iterable-এর একটি লিস্ট প্যারামিটার হিসেবে নেয় এবং প্রতিটি আইটেমকে ফাইলে কমা-সেপারেটেড লাইন হিসেবে লেখে।
নিচের উদাহরণটি write() ফাংশন ব্যবহার দেখায়। প্রথমে একটি ফাইল 'w' মোডে খোলা হয়। এই ফাইল ব্যবহার করে writer অবজেক্ট পাওয়া যায়। লিস্টের প্রতিটি টাপল writerow() মেথড দিয়ে ফাইলে লেখা হয়।
>>> import csv
>>> persons = [('Lata', 22, 45), ('Anil', 21, 56), ('John', 20, 60)]
>>> csvfile = open('persons.csv', 'w', newline='')
>>> obj = csv.writer(csvfile)
>>> for person in persons:
... obj.writerow(person)
>>> csvfile.close()
এটি করেন্ট ডিরেক্টরিতে 'persons.csv' ফাইল তৈরি করবে। এর ডেটা হবে:
Lata,22,45 Anil,21,56 John,20,60
লিস্টের ওপর ইটারেট করে প্রতিটি সروا আলাদা লেখার বদলে writerows() মেথড ব্যবহার করা যায়।
>>> csvfile = open('persons.csv', 'w', newline='')
>>> obj = csv.writer(csvfile)
>>> obj.writerows(persons)
>>> obj.close()
reader() ফাংশন
এই ফাংশনটি একটি reader অবজেক্ট ফেরত দেয় যা CSV ফাইলের লাইনগুলোর একটি ইটেরেটর রিটার্ন করে। সাধারণ for লুপ ব্যবহার করে ফাইলের সব লাইন নিচের উদাহরণে প্রদর্শিত হয়েছে।
>>> csvfile = open('persons.csv', 'r', newline='')
>>> obj = csv.reader(csvfile)
>>> for row in obj:
... print(row)
['Lata', '22', '45']
['Anil', '21', '56']
['John', '20', '60']
reader অবজেক্ট একটি ইটেরেটর হওয়ায়, বিল্ট-ইন next() ফাংশনও CSV ফাইলের সব লাইন প্রদর্শনের জন্য উপযোগী।
>>> csvfile = open('persons.csv', 'r', newline='')
>>> obj = csv.reader(csvfile)
>>> while True:
... try:
... row = next(obj)
... print(row)
... except StopIteration:
... break
csv মডিউল একটি dialect ক্লাসও সংজ্ঞায়িত করে। Dialect হলো CSV প্রোটোকল বাস্তবায়নের জন্য মানদণ্ডের একটি সেট। উপলব্ধ ডায়ালেক্টের লিস্ট list_dialects() ফাংশন দিয়ে পাওয়া যায়।
>>> csv.list_dialects() ['excel', 'excel-tab', 'unix']
DictWriter() ফাংশন
এই ফাংশনটি একটি DictWriter অবজেক্ট ফেরত দেয়। এটি writer অবজেক্টের মতো, কিন্তু সারিগুলো ডিকশনারি অবজেক্টে ম্যাপ করা থাকে। ফাংশনটি লিখার অনুমতিপ্রাপ্ত একটি ফাইল অবজেক্ট এবং ডিকশনারিতে ব্যবহৃত কীগুলোর লিস্ট fieldnames প্যারামিটার হিসেবে নেয়। এটি ফাইলের প্রথম লাইনকে হেডার হিসেবে লেখার জন্য ব্যবহৃত হয়।
writeheader() মেথড
এই মেথডটি ডিকশনারির কীগুলোর লিস্টকে কমা-সেপারেটেড লাইন হিসেবে ফাইলের প্রথম লাইনে লেখে।
নিচের উদাহরণে, ডিকশনারি আইটেমের একটি লিস্ট সংজ্ঞায়িত করা হয়েছে। লিস্টের প্রতিটি আইটেম একটি ডিকশনারি। writerows() মেথড ব্যবহার করে সেগুলো কমা-সেপারেটেড ভাবে ফাইলে লেখা হয়েছে।
>>> persons = [{'name': 'Lata', 'age': 22, 'marks': 45},
... {'name': 'Anil', 'age': 21, 'marks': 56},
... {'name': 'John', 'age': 20, 'marks': 60}]
>>> csvfile = open('persons.csv', 'w', newline='')
>>> fields = list(persons[0].keys())
>>> obj = csv.DictWriter(csvfile, fieldnames=fields)
>>> obj.writeheader()
>>> obj.writerows(persons)
>>> csvfile.close()
ফাইলের কন্টেন্ট হবে:
name,age,marks Lata,22,45 Anil,21,56 John,20,60
DictReader() ফাংশন
এই ফাংশনটি অন্তর্নিহিত CSV ফাইল থেকে একটি DictReader অবজেক্ট ফেরত দেয়। reader অবজেক্টের মতো এটিও একটি ইটেরেটর, ব্যবহার করে ফাইলের কন্টেন্ট পুনরুদ্ধার করা যায়।
>>> csvfile = open('persons.csv', 'r', newline='')
>>> obj = csv.DictReader(csvfile)
এই ক্লাস fieldnames এট্রিবিউট প্রদান করে, যা ফাইলের হেডার হিসেবে ব্যবহৃত ডিকশনারি কীগুলো ফেরত দেয়।
>>> obj.fieldnames ['name', 'age', 'marks']
DictReader অবজেক্টের ওপর লুপ চালিয়ে প্রতিটি ডিকশনারি অবজেক্ট আনা যায়।
>>> for row in obj: ... print(row)
এটি নিচের আউটপুট দেবে:
OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
OrderedDict([('name', 'Anil'), ('age', '21'), ('marks', '56')])
OrderedDict([('name', 'John'), ('age', '20'), ('marks', '60')])
OrderedDict অবজেক্টকে নরমাল ডিকশনারিতে রূপান্তর করতে collections মডিউল থেকে OrderedDict ইম্পোর্ট করতে হয়।
>>> from collections import OrderedDict
>>> r = OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
>>> dict(r)
{'name': 'Lata', 'age': '22', 'marks': '45'}
এই আর্টিকেলে csv মডিউলের বৈশিষ্ট্যগুলো ব্যাখ্যা করা হয়েছে।