পাইথনে ফাইল হ্যান্ডেলিং
যেকোনো এপ্লিকেশন ফাইল পড়া, ফাইল মডিফাই করা, নতুন ফাইল বানানো – এগুলো খুবই গুরুত্বপূর্ণ ব্যাপার। আমরা এই সেশনে দেখব পাইথন দিয়ে কিভাবে ফাইল সংক্রান্ত এসব ব্যাপার হ্যান্ডেল করতে পারি। এখানে আমরা টেক্সট ফাইল নিয়ে আলোচনা করবো।
Prerequisite
যেকোনো ফাইল আমরা আমাদের ডিস্কে যেভাবে দেখি তার সিনট্যাক্স হলোঃ `file_name.extension`
Example:
1. the_dark_knight.mp4 – এখানে demo হলো file_name এবং mp4 হলো extension
2. jocker.py – এখানে some হলো file_name এবং py হলো extension
3. batman.txt – এখানে some হলো file_name এবং txt হলো extension
ফাইল পড়া
ধরা যাক , আমাদের ডিরেক্টরিতে নিচের ফাইল গুলো আছে, batman.txt এ কিছু বাক্য লিখা আছে , আর gotham.py এ আমরা আমাদের যাবতীয় পাইথনের কোডগুলি লিখব।
batman.txt এর উপরের লিখাগুলোই আমরা পাইথন দিয়ে পড়ে দেখবো
ফাইল হ্যান্ডেল করতে আমরা পাইথনের বিল্ট-ইন open() ফাংশন এর হেল্প নিবো। open(param1, param2) ফাংশনটি দু’টি স্ট্রিং প্যারামিটার নিবে।
– *param1* – যে ফাইলটি ওপেন করতে চাচ্ছি তার Path যেটা আমাদের ক্ষেত্রে batman.txt
যেহেতু আমাদের পাইথন স্ক্রিপ্ট এবং টেক্সট ফাইলটি একই ডিরেক্টরিতে আছে, সেজন্য আমরা শুধু ফাইলের নামটা দিয়েছি। এছাড়া পুরো ফাইল path দিলেও কাজ করবে। যেমনঃ /home/vivasoft/Desktop/the_dark_knight/batman.txt. পাইথন স্ক্রিপ্ট এবং টেক্সট ফাইল দু’টি যদি দুই ডিরেক্টরিতে হয়, তাহলে অবশ্যই পুরো ফাইল path দিতে হবে।
– *param2* – কোন mode এ ফাইলটি open করতে চাই। ফাইল পড়তে “r” দিতে হবে। আর কি কি mode দেয়া যাবে, সেটা একটু পরে বলা হবে। আমরা open() ফাংশনের রিটার্ন করা ভ্যালু স্টোর করে পরবর্তীতে কাজে লাগাবো।
যেটা মাথায় রাখতে হবে – একটা ফাইল ওপেন করার সাথে সাথে সেটাকে সাথে সাথে ক্লোজ করার কোড লিখে ফেলা। ফাইল ক্লোজ করা গুড প্র্যাকটিস। ভ্যারিয়েবল batman দিয়েই ফাইল ক্লোজ করা যাবে।
ফাইল ওপেন এবং ক্লোজ এর মাঝেই আমরা ফাইল নিয়ে যাবতীয় কোড লিখবো।
পুরো ফাইল একবারে প্রিন্ট করতে চাইলে
batman ভ্যারিয়েবল থেকে read() মেথড দিয়ে আমরা সম্পূর্ণ কন্টেন্ট একবারে পড়তে পারবো।
ফাইলের উপর লুপ চালিয়ে কন্টেন্ট পড়া
batman ভ্যারিয়েবলের উপর কিন্তু আমরা iteration ও চালাতে পারবো।
নির্দিষ্ট কয়েকটা ক্যারেক্টার পড়ার করার জন্য
read() মেথডের মধ্যে ক্যারেক্টার সংখ্যা দিয়ে দিবো। ১১ টা অক্ষর পড়তে চাইলেঃ
একটি লাইন একবারে লাইন পড়ার জন্য
readline() মেথড একটি একটি করে লাইন পড়ে থাকে। প্রতি লাইন পড়া হলে লাইন পয়েন্ট করে রাখে। আবার readline() কল করলে পরের লাইনটি দেখায়।
দেখা যাচ্ছে, ফাইল পড়ার মাঝে আমরা অন্য কোন কোডও এক্সিকিউট করতে পারি। তাছাড়া, ফাইল পুরো পড়া শেষ হয়ে গেলেও, readline() method টি করলেও এরর দিবে না।
ফাইলে লেখা
কোন ফাইল write করা বলতে বুঝায় – আগে তৈরী কোন ফাইলে কোন কন্টেন্ট যোগ করা অথবা নতুন করে ফাইল তৈরী করে সেই ফাইলে লিখা। এর জন্য আমরা দু’টি mode এর ব্যবহার দেখবো।
“w” mode এর ব্যবহার
যদি কোন ফাইল আগেই তৈরী করা থাকে, তাহলে সে ফাইলে কোন কন্টেন্ট থাকলেও “w” mode এ open করার কারণে, এর সব কন্টেন্ট হারিয়ে যাবে। এরপর আমরা ফাইলে নতুন যেকোনো কিছু লিখতে পারবো। তবে, প্রতিবার আগের ফাইল “w” mode এ open করলে, প্রতিবারই ফাইলটির কন্টেন্ট মুছে যাবে।
এখন jocker.txt নামে একটি ফাইল তৈরী করি-
এখন jocker.txt ফাইলটি open করলে আমরা দেখতে পারবো – Why so serious? এই লিখা টি চলে আসছে।
উল্লেখ্য, যেকোনো লাইন লিখার সাথে সাথে \n দেয়াটা ভালো। ফাইল append করার সময় আমরা এটার প্রয়োজনীয়তা বুঝতে পারবো। ফাইল append নিয়ে পরের সেকশন এ আলোচনা করা হবে।
আবার আরেকটা কিছু যদি লিখতে যাই, তাইলে দেখবো আগের লিখাটি চলে গিয়ে, নতুন লিখা replace হয়ে গিয়েছে ।
আগে jocker.txt নামে কোন ফাইল তৈরী না থাকলেও, উপরের কোড অটোমেটিক্যালি jocker.txt নামে একটি ফাইল তৈরী করে নিবে।
“x” mode এর ব্যবহার
“x” mode দিয়েও কোন ফাইলে লিখা যায়। তবে শর্ত হচ্ছে, যে ফাইলের নামে দিবো, সেটি আগে থেকে থাকলে হবে না। এটি সব সময় নতুন ফাইল তৈরী করে।
এখানে নতুন একটি ফাইল তৈরী হয়ে গিয়েছে। সাথে সাথে ফাইলের মধ্যে লিখাটিও। এখানে যদি, ফাইলটি আগে থেকেই তৈরী থাকে তাহলে এরর হবে।
তাহলে কোডটি নিচের মতো করে লিখা যায়।
Append: “a” mode এর ব্যবহার
append মানে হচ্ছে, ফাইলে যেই কন্টেন্ট আছে, সেই কন্টেন্ট এর সাথে নতুন কোন কন্টেন্ট যোগ করা।
এজন্য আমরা “a” mode এ jocker.txt ফাইলটি আবার open করি ও আউটপুট খেয়াল করে দেখি-
jocker.txt ফাইলে ইতিমধ্যে “Do I Look Like a Guy with a Plan?” লিখে ছিলো। এখন নতুন লাইন যোগ হয়ে গেলো। এখানে \n দিয়ে write করার জন্য, “When you bring me out, can you introduce me as Joker?” লিখাটি নতুন লাইনে লেখা হয়েছে।
আগে jocker.txt নামে কোন ফাইল তৈরী না থাকলেও, উপরের কোড রান করলে অটোমেটিক্যালি jocker.txt নামে একটি ফাইল তৈরী করে নিবে।
| Mood | Task | remark |
| ——– | ——– | ——– |
| r | To read a file | ফাইলটি আগে থেকে তৈরী থাকতে হবে |
| w | To write a file | ফাইলটি আগে থেকে তৈরী না থাকলে , তৈরী হয়ে যাবে |
| x | To write a file | ফাইলটি আগে থেকে তৈরী থাকতে হবে |
| a | To append a file | ফাইলটি আগে থেকে তৈরী না থাকলে , তৈরী হয়ে যাবে |
***
- Appending into text filefile = open(‘my_file.txt’,‘a’)file.write(“I am appending into my file.\n”)file.close()// verify itfile = open(‘my_file.txt’,‘r’)print(file.read())file.close()
- ১। একটি কন্টাক্ট সিস্টেম বানাতে হবে, যেখানে কন্টাক্ট নেম এবং ফোন নাম্বার একটি টেক্সট ফাইলে স্টোর করতে হবে। আমরা কোন কন্টাক্ট সার্চ করতে পারবো, এডিট করতে পারবো এবং ডিলিটও করতে পারবো। সবগুলো কন্টাক্ট-লিস্টও দেখতে পারবো। কনসোল থেকেই ইনপুট নিব, কনসোল এই আউটপুট দেখাবো।নিচে একটি নমুনা দেখানো হলঃSelect one :1.Insert2.Search3.Edit4.Delete5.AllAny key to exitPlease Enter : 5All contacts:Name: asif | Contact: 123456Name: murad | Contact: 98657Name: shuvo | Contact: 0000111Select one :1.Insert2.Search3.Edit4.Delete5.AllAny key to exitPlease Enter : 1Enter Name : muradAlready Exist !Select one :1.Insert2.Search3.Edit4.Delete5.AllAny key to exitPlease Enter : 1Enter Name : ShakibEnter Number : 757575AddedSelect one :1.Insert2.Search3.Edit4.Delete5.AllAny key to exitPlease Enter : 40Program Closed …
- গুরুত্বপূর্ন প্রশ্নসমুহ* ফাইল হ্যান্ডেল এর মুডগুলো কি কি ?* x – mood এর কি কোন অসুবিধা আছে ?* এপেন্ড করার জন্য w – mood ব্যাবহার করব কি ?