ফাইল

ফাইল #

ফাইল নিয়ে বলার মত তো কিছুই নাই। সরকারি দফতরে ফাইল নিয়ে যে কত্ত ধকল পোহাইতে হইছে তা কেবল আল্লাহ মালুম। এক টেবিল থেকে অন্য টেবিলে তো দূরে থাক, একই টেবিলে ফাইলের স্তুপে নিচ থেকে উপরে উঠাইতেও কি আর কম ধকল? তবে পাইথনে ফাইল নিয়ে কাজবাজ করা এতটা কঠিন না। ফাইল নিয়ে কাজ করতে গিয়ে আমরা তিনটা জিনিস শিখব। ফাইল ওপেন (open) করা, ওপেন করা ফাইল রিড (read) করা, রিড করার পর ফাইল রাইট (write) করা আর শেষমেষ ফাইল ক্লোজ (close) করা।

প্রথমে আমরা শিখব কিভাবে সাধের ফাইলটা ওপেন করা যায়। কারণ, ফাইল ওপেন না করে তো আর বাকি কাজ করা যাবে না। পাইথনে ফাইল ওপেন করার জন্য open() ফাংশনটা ব্যবহার করব আমরা। এই ফাংশনটা তিনটা প্যারামিটার নিয়ে কাজ করে।

  • ফাইলের নাম: প্রথম প্যারামিটার হল ফাইলের নাম। আমাদের স্ক্রিপ্ট ও আলোচ্য ফাইল যদি একই ডিরেক্টরিতে হয় তবে শুধু ফাইলের নামটা স্ট্রিং হিসাবে দিতে হয়। ফাইল যদি আলাদা ডিরেক্টরিতে থাকে তবে পুরো পাথটা স্ট্রিং হিসাবে দিতে হবে।
  • অ্যাক্সেস মোড: দ্বিতীয় প্যারামিটার হল অ্যাক্সেস মোড। একটা ফাইলকে আমরা বিভিন্ন কাজের জন্য ওপেন করতে পারি। সেক্ষেত্রে ভিন্ন ভিন্ন কাজের জন্য ভিন্ন ভিন্ন মোডে ফাইলটা ওপেন করতে হবে। নিচে কতগুলো মোডের নাম ও কোন কাজে লাগে তা দেয়া হল।
মোডবর্ণনা
rএটা হল ডিফল্ট মোড। কোন মোড স্পেসিফাই করে না দেয়া হলে এটা আপনা-আপনি কাজ করে। এটা শুধু রিড করার জন্য একটা ফাইলকে ওপেন করে। আর ফাইল পয়েন্টার ফাইলের শুরুতে থাকে।
rbসবকিছু মোড r এর মতই। শুধু তফাৎ হল ফাইলটা বাইনারি ফরম্যাটে ওপেন করে।
r+সবকিছু মোড r এর মতই। এক্সট্রা বেনেফিট হল ফাইলটা রাইটও করা যায়।
rb+r+ আর rb এর কম্বিনেশন।
wফাইলকে রাইট মোডে ওপেন করে। ফাইলের অস্তিত্ব না থাকলে নিজ থেকেই ফাইল তৈরি করে নেয়। আর অস্তিত্ব থেকে থাকলে পুরাতন ফাইলকে ওভাররাইট করে।
wbসবকিছু মোড w এর মতই। শুধু তফাৎ হল ফাইলটা বাইনারি ফরম্যাটে ওপেন করে।
w+সবকিছু মোড w এর মতই। এক্সট্রা বেনেফিট হল ফাইলটা রিডও করা যায়।
wb+w+ আর wb এর কম্বিনেশন।
aফাইলকে অ্যাপেন্ড (append) মোডে ওপেন করে। এই মোডে ফাইল পয়েন্টার ফাইলের একেবারে শেষে থাকে। ফাইল রাইট করলে তা ফাইলের শেষে যোগ হয়। ফলে আগের সব ডাটা রক্ষিত থাকে। তবে ফাইলের অস্তিত্ব না থাকলে নিজ থেকেই ফাইল তৈরি করে নেয়।
abসবকিছু মোড a এর মতই। শুধু তফাৎ হল ফাইলটা বাইনারি ফরম্যাটে ওপেন করে।
a+সবকিছু মোড a এর মতই। এক্সট্রা বেনেফিট হল ফাইলটা রিডও করা যায়।
ab+a+ আর ab এর কম্বিনেশন।
  • বাফারিং: তৃতীয় প্যারামিটার হল বাফারিং। এটা একটু উচ্চতর বিষয়। আমরা এটা সম্পর্কে পরে জানব।

কয়েকটা উদাহরণ দিলে বিষয়গুলো আরো পরিষ্কার হয়ে যাবে আমাদের কাছে। এজন্য আমরা ছোট্ট একটা কাজ করব। আমাদের স্ক্রিপ্টের সাথে একই ডিরেক্টরিতে test.txt নামে একটা ফাইল তৈরি করব। তারপর ফাইলে The name of my country is Bangladesh. কথাটা লিখে সেইভ করে রাখব। এবার কয়েকটা প্রোগ্রাম লেখা যাক।

my_file = open('test.txt', 'r')
content = my_file.read()
print(content)
my_file.close()

আউটপুট

The name of my country is Bangladesh.

প্রোগ্রামটার ময়নাতদন্ত করা যাক একটু। প্রথম লাইনে আমরা ফাইলটা রিড মোডে ওপেন করেছি। দ্বিতীয় লাইনে ফাইলটা read() ফাংশনের (আসলে মেথড) সাহায্যে রিড করে ডাটা content ভ্যারিয়েবলে অ্যাসাইন করেছি। আর শেষ লাইনে close() ফাংশন (মেথড) ব্যবহার করে ফাইলটা ক্লোজ করে দিয়েছি। আরেকটা প্রোগ্রাম দেখা যাক।

my_file = open('test.txt', 'w')
my_file.write('I am Maksudur Rahman Maateen.')
my_file.close()

এখানে write() ফাংশন (মেথড) ব্যবহার করে আমরা ফাইলটা রাইট করেছি। এই ফাংশনের ভিতর স্ট্রিং হিসাবে যা দেয়া হবে তাই রাইট হবে ফাইলে। প্রোগ্রামটা রান করলে আমরা আউটপুট কিছুই পাব না। তবে ফাইলটা যদি নরমালি ওপেন করে দেখি তাহলে দেখব সেখানে এখন The name of my country is Bangladesh. এর পরিবর্তে I am Maksudur Rahman Maateen. লেখা রয়েছে। এবার আরেকটা প্রোগ্রাম দেখা যাক।

my_file = open('test.txt', 'a')
my_file.write('I am from Bangladesh.')
my_file.close()

এই প্রোগ্রামটা রান করলেও আমরা আউটপুট কিছুই পাব না। তবে ফাইলটা যদি নরমালি ওপেন করে দেখি তাহলে দেখব সেখানে এখন I am Maksudur Rahman Maateen. এর পরে I am from Bangladesh. লেখা রয়েছে। এবার আরেকটা প্রোগ্রাম দেখা যাক।

my_file = open('test.txt', 'r')
content = my_file.read(5)
print(content)
content = my_file.read()
print(content)
position = my_file.tell()
print(position)
my_file.seek(0, 0)
content = my_file.read()
print(content)
my_file.close()

আউটপুট

I am
Maksudur Rahman Maateen.I am from Bangladesh.

51
I am Maksudur Rahman Maateen.I am from Bangladesh.

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

with open('test.txt', 'r') as my_file:
    content = my_file.read()
    print(content)

আউটপুট

I am Maksudur Rahman Maateen.I am from Bangladesh.

এই প্রোগ্রামে আমরা with স্টেটমেন্ট ব্যবহার করেছি। স্টেটমেন্টটা ব্যবহার করে ফাইলটা my_file নামে ওপেন করেছি। বাদবাকি অপারেশন নরমাল। কেউ কি লক্ষ্য করেছি যে আমরা ফাইলটা ক্লোজ করিনি। আসলে এটাই এই স্টেটমেন্টের সুবিধা। কাজ শেষে বা কোন এরর পেলে নিজ থেকেই ফাইলটা ক্লোজ করে দেয়।

এই ছিল ফাইল নিয়ে আমাদের বেসিক আলোচনা। এখন বাড়ির কাজ আছে। একটা ফাইলে লুপ ঘুরিয়ে ১ থেকে ১০০ পর্যন্ত লাইন বাই লাইন রাইট করব আমরা। কি পারব তো সবাই? চেষ্টা করলে অবশ্যই পারব।

মন্তব্য করুন