Lesson ১০৬ মিনিট পড়া

ফাইল I/O (File I/O)

ফাইল পড়া এবং লেখা — কারণ আপনার প্রোগ্রাম শেষ হলেও ডেটা থেকে যাওয়া প্রয়োজন

ফাইল খোলা — with স্টেটমেন্ট (Opening Files — The with Statement)

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

এক্ষেত্রে with স্টেটমেন্ট হলো আপনার সেরা বন্ধু — এরর হলেও কাজ শেষে এটি স্বয়ংক্রিয়ভাবে ফাইলটি বন্ধ করে দেয়। সবসময় এটি ব্যবহার করুন।

open() ফাংশন ফাইলের নাম এবং একটি মোড (mode) গ্রহণ করে:

  • "r" — রিড (ডিফল্ট)। এক্ষেত্রে ফাইলটির অস্তিত্ব থাকতে হবে।
  • "w" — রাইট। এটি নতুন ফাইল তৈরি করে অথবা আগের ডেটাকে ওভাররাইট (মুছে দিয়ে নতুন করে লেখে) করে!
  • "a" — অ্যাপেন্ড বা যুক্ত করা। এটি আগের ডেটা না মুছে একদম শেষে নতুন ডেটা যোগ করে।
  • "x" — এক্সক্লুসিভ ক্রিয়েট। ফাইলটি আগে থেকেই থাকলে এটি কাজ করে না ও ফেল করে।
  • বাইনারি মোডের জন্য "b" যোগ করুন: "rb", "wb"

ফাইল লেখা এবং পড়া (Writing & Reading Files)

# Writing a file
with open("grocery_list.txt", "w") as f:
f.write("Apples\n")
f.write("Bread\n")
f.write("Milk\n")
f.write("Cheese\n")
print("File written!")
# Reading the entire file
with open("grocery_list.txt", "r") as f:
content = f.read()
print("Full content:")
print(content)
# Reading line by line (memory efficient for big files)
with open("grocery_list.txt", "r") as f:
for line_number, line in enumerate(f, start=1):
print(f"{line_number}: {line.strip()}")
Output
File written!
Full content:
Apples
Bread
Milk
Cheese

1: Apples
2: Bread
3: Milk
4: Cheese

রিডিং মেথডগুলোর তুলনা (Reading Methods Compared)

ফাইলের ডেটা পড়ার জন্য পাইথনে তিনটি মেথড বা পদ্ধতি রয়েছে:

  • .read()পুরো ফাইলটি একটি বড় স্ট্রিং হিসেবে রিটার্ন করে। ছোট ফাইলের জন্য এটি দারুণ কার্যকর।
  • .readline() — যেকোনো একবারে একটি লাইন (one line) রিটার্ন করে। পরের লাইনের জন্য এটিকে বারবার কল করতে হয়।
  • .readlines()সবগুলো লাইনের একটি লিস্ট রিটার্ন করে। প্রতিটি লাইনে একটি \n বা নিউলাইন ক্যারেক্টার থাকে।
  • ফাইল অবজেক্টের ওপর ইটারেট করা — বড় ফাইলের জন্য এটি সবচেয়ে ভালো পদ্ধতি। এটি পুরো ফাইল মেমোরিতে লোড না করেই একবারে এক লাইন করে পড়ে।

অ্যাপেন্ড করা এবং readlines() এর ব্যবহার (Appending & Using readlines())

# Append to an existing file
with open("grocery_list.txt", "a") as f:
f.write("Eggs\n")
f.write("Butter\n")
# Read all lines into a list
with open("grocery_list.txt", "r") as f:
lines = f.readlines()
print("Raw lines:", lines[:3]) # First 3 (notice the \n)
# Clean up — strip whitespace from each line
clean_lines = [line.strip() for line in lines]
print("Clean lines:", clean_lines)
print(f"Total items: {len(clean_lines)}")
Output
Raw lines: ['Apples\n', 'Bread\n', 'Milk\n']
Clean lines: ['Apples', 'Bread', 'Milk', 'Cheese', 'Eggs', 'Butter']
Total items: 6

CSV ফাইল নিয়ে কাজ করা (Working with CSV Files)

ডেটা সংরক্ষণের জন্য CSV (Comma-Separated Values) অন্যতম একটি পরিচিত ফাইল ফরম্যাট। পাইথনের নিজস্ব একটি csv মডিউল রয়েছে, তবে সাধারণ কাজের জন্য আপনি কেবল .split() এবং f-স্ট্রিংও ব্যবহার করতে পারেন।

CSV ফাইলের বেসিকস (CSV Basics)

import csv
# Writing a CSV file
students = [
["Name", "Grade", "Score"],
["Anika", "A", "95"],
["Rafi", "B", "87"],
["Sadia", "A", "92"],
]
with open("students.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(students)
print("CSV written!")
# Reading a CSV file
with open("students.csv", "r") as f:
reader = csv.reader(f)
header = next(reader) # Skip the header row
print(f"Columns: {header}")
for row in reader:
print(f"{row[0]} scored {row[2]} (Grade {row[1]})")
print()
# Using DictReader for named columns
with open("students.csv", "r") as f:
reader = csv.DictReader(f)
for row in reader:
print(f"{row['Name']}: {row['Score']}")
Output
CSV written!
Columns: ['Name', 'Grade', 'Score']
Alice scored 95 (Grade A)
Bob scored 87 (Grade B)
Charlie scored 92 (Grade A)

Alice: 95
Bob: 87
Charlie: 92
Note: ফাইল নিয়ে কাজ করার সময় সবসময় with স্টেটমেন্ট ব্যবহার করুন। এটি অনেকটা দায়িত্বশীল কোনো রুমমেটের মতো যে ঘর থেকে বের হওয়ার সময় সবসময় লাইট বন্ধ করে যায় — আপনার কোড মাঝপথে ক্র্যাশ করলেও এর ফলে ফাইলগুলো ঠিকমতো বন্ধ করা হয়।
চ্যালেঞ্জ

ছোট কুইজ

ফাইলটি আগে থেকেই থাকলে "w" মোড কী করে?
ComprehensionsError Handling