HomeCoursesPython
Chapter 11 of 14

ফাইল হ্যান্ডলিং

open(), read, write, with statement & CSV file operations

ফাইল কেন পড়া/লেখা দরকার

Program চলাকালীন সব ডেটা RAM-এ থাকে — program বন্ধ হলে সব হারিয়ে যায়। File handling দিয়ে ডেটা disk-এ সংরক্ষণ করা যায়, যাতে পরে আবার ব্যবহার করা যায়।

ফাইল ব্যবহারের ক্ষেত্র

ফাইল খোলা ও বন্ধ করা

Python-এ open() function দিয়ে ফাইল খোলা হয়। ফাইল খোলার সময় mode নির্ধারণ করতে হয় — কী উদ্দেশ্যে ফাইল খোলা হচ্ছে:

Modeনামকাজফাইল না থাকলে
"r"Readশুধু পড়া (default)FileNotFoundError
"w"Writeলেখা (পুরনো content মুছে যায়)নতুন ফাইল তৈরি
"a"Appendশেষে যোগ করানতুন ফাইল তৈরি
"r+"Read+Writeপড়া ও লেখা দুটোইFileNotFoundError
"x"Exclusive Createনতুন ফাইল তৈরি করে লেখাফাইল থাকলে FileExistsError
# ফাইল খোলা ও বন্ধ করা — traditional উপায়
f = open("data.txt", "r")    # Read mode-এ খোলা
content = f.read()            # পুরো content পড়া
print(content)
f.close()                     # ⚠️ অবশ্যই বন্ধ করতে হবে!

# Write mode — পুরনো content মুছে যায়
f = open("output.txt", "w")
f.write("নতুন ডেটা লেখা হলো\n")
f.close()

# Append mode — শেষে যোগ হয়
f = open("log.txt", "a")
f.write("নতুন লগ এন্ট্রি\n")
f.close()
🔑 ফাইল বন্ধ করা কেন জরুরি?
  • ফাইল বন্ধ না করলে data loss হতে পারে — write buffer flush নাও হতে পারে
  • অনেক ফাইল খোলা থাকলে OS-এর file descriptor limit শেষ হয়ে যেতে পারে
  • অন্য program ফাইলটি ব্যবহার করতে পারবে না (file lock)
  • সমাধান: with statement ব্যবহার করুন — এটি automatically বন্ধ করে!

with Statement

with statement হলো Python-এ ফাইল handle করার সবচেয়ে ভালো উপায় (best practice)। এটি একটি context manager যা block শেষ হলে স্বয়ংক্রিয়ভাবে ফাইল বন্ধ করে দেয় — এমনকি error হলেও:

# with statement — recommended উপায়
with open("data.txt", "r") as f:
    content = f.read()
    print(content)
# ← এখানে আসলে f.close() automatically হয়ে যায়!

# with statement + write
with open("output.txt", "w") as f:
    f.write("প্রথম লাইন\n")
    f.write("দ্বিতীয় লাইন\n")
# ফাইল নিজে থেকেই বন্ধ হয়ে গেছে

# একসাথে দুটি ফাইল (Python 3.1+)
with open("input.txt", "r") as src, open("output.txt", "w") as dst:
    dst.write(src.read())
💡 with Statement মনে রাখার কৌশল

"with = wise intelligent tidy handler"
with ব্যবহার করলে: ✅ close() মনে রাখতে হয় না, ✅ error হলেও ফাইল বন্ধ হয়, ✅ কোড পরিষ্কার থাকে।
নিয়ম: সবসময় with ব্যবহার করুন, কোনো কারণ ছাড়া open() + close() করবেন না!

ফাইল পড়া

ফাইল পড়ার বিভিন্ন method আছে — প্রয়োজন অনুযায়ী বেছে নিন:

Methodকাজরিটার্ন টাইপবড় ফাইলে উপযুক্ত?
read()পুরো ফাইল একসাথে পড়েstr❌ (মেমরি সমস্যা)
read(n)n characters পড়েstr
readline()এক লাইন পড়েstr
readlines()সব লাইন list-এ পড়েlist
for line in fলাইন বাই লাইন iteratestr (প্রতিটি)✅ (সবচেয়ে ভালো)
# পুরো ফাইল পড়া
with open("poem.txt", "r", encoding="utf-8") as f:
    all_text = f.read()
    print(all_text)

# লাইন বাই লাইন পড়া — বড় ফাইলের জন্য সবচেয়ে ভালো
with open("data.txt", "r", encoding="utf-8") as f:
    for line in f:
        clean_line = line.strip()  # newline character সরানো
        print(clean_line)

# readlines() — সব লাইন list হিসেবে
with open("names.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    print(lines)  # ['রহিম\n', 'করিম\n', 'সাদিয়া\n']

# নির্দিষ্ট সংখ্যক character পড়া
with open("data.txt", "r") as f:
    first_100 = f.read(100)  # প্রথম 100 characters

ফাইল লেখা

ফাইলে ডেটা লিখতে write() বা writelines() method ব্যবহার করা হয়:

# write() — একটি string লেখা
with open("output.txt", "w", encoding="utf-8") as f:
    f.write("আমার নাম রহিম\n")
    f.write("আমি Python শিখছি\n")
    f.write(f"তারিখ: 2026-03-18\n")

# writelines() — list-এর সব item লেখা
lines = ["প্রথম লাইন\n", "দ্বিতীয় লাইন\n", "তৃতীয় লাইন\n"]
with open("output.txt", "w", encoding="utf-8") as f:
    f.writelines(lines)

# Append mode — আগের ডেটা থাকে, শেষে যোগ হয়
with open("log.txt", "a", encoding="utf-8") as f:
    f.write("নতুন এন্ট্রি যোগ হলো\n")

# বাস্তব উদাহরণ — student data লেখা
students = [
    {"name": "রহিম", "gpa": 3.75},
    {"name": "সাদিয়া", "gpa": 3.90},
    {"name": "করিম", "gpa": 3.50}
]

with open("students.txt", "w", encoding="utf-8") as f:
    f.write("নাম\t\tGPA\n")
    f.write("-" * 20 + "\n")
    for s in students:
        f.write(f"{s['name']}\t\t{s['gpa']}\n")

CSV ফাইল

CSV (Comma-Separated Values) হলো tabular data সংরক্ষণের সবচেয়ে জনপ্রিয় format। Excel, Google Sheets সহ প্রায় সব data tool CSV সাপোর্ট করে। Python-এর built-in csv module দিয়ে সহজে CSV handle করা যায়:

import csv

# CSV ফাইল পড়া — csv.reader
with open("students.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    header = next(reader)   # প্রথম row (header)
    print(header)           # ['Name', 'Dept', 'GPA']
    
    for row in reader:
        print(f"{row[0]} — {row[1]} — GPA: {row[2]}")

# CSV ফাইল লেখা — csv.writer
with open("output.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["Name", "Dept", "GPA"])       # header
    writer.writerow(["রহিম", "CSE", 3.75])
    writer.writerow(["সাদিয়া", "EEE", 3.90])
    
    # একসাথে অনেক row লেখা
    data = [["করিম", "BBA", 3.50], ["নাহিদ", "ME", 3.60]]
    writer.writerows(data)

DictReader ও DictWriter

Column name দিয়ে data access করতে DictReaderDictWriter ব্যবহার করা হয় — কোড আরও readable হয়:

import csv

# DictReader — প্রতিটি row dictionary হিসেবে পড়ে
with open("students.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(f"{row['Name']} — GPA: {row['GPA']}")

# DictWriter — dictionary থেকে CSV লেখা
students = [
    {"Name": "রহিম", "Dept": "CSE", "GPA": 3.75},
    {"Name": "সাদিয়া", "Dept": "EEE", "GPA": 3.90}
]

with open("output.csv", "w", encoding="utf-8", newline="") as f:
    fields = ["Name", "Dept", "GPA"]
    writer = csv.DictWriter(f, fieldnames=fields)
    writer.writeheader()       # header row লেখা
    writer.writerows(students) # সব data লেখা
🔑 CSV লেখার সময় newline="" কেন?

Windows-এ csv.writer ছাড়াও Python নিজে newline যোগ করে, ফলে double newline (ফাঁকা লাইন) আসে। newline="" দিলে Python-এর extra newline বন্ধ হয় এবং csv module নিজে handle করে। সবসময় CSV write-এ newline="" ব্যবহার করুন!

🧠 Quick Check
এই অধ্যায়ের উপর ৫টি প্রশ্নের উত্তর দিন
Q1. open("data.txt", "w") দিয়ে ফাইল খুলে লিখলে কী হবে?
✅ সঠিক উত্তর: খ) পুরনো ডেটা মুছে গিয়ে নতুন ডেটা লেখা হবে"w" (write) mode ফাইলের আগের সব content মুছে দেয়। আগের ডেটা রাখতে চাইলে "a" (append) mode ব্যবহার করুন।
Q2. with statement ব্যবহারের প্রধান সুবিধা কী?
✅ সঠিক উত্তর: খ) ফাইল automatically বন্ধ হয়with block শেষ হলে — এমনকি error হলেও — ফাইল নিজে থেকে বন্ধ হয়ে যায়। এতে close() ভুলে যাওয়ার ঝুঁকি থাকে না।
Q3. বড় ফাইল লাইন বাই লাইন পড়ার সবচেয়ে ভালো উপায় কোনটি?
✅ সঠিক উত্তর: গ) for line in f: দিয়ে iterate করা। এই পদ্ধতিতে একবারে শুধু একটি লাইন মেমরিতে থাকে, তাই বড় ফাইলেও মেমরি সমস্যা হয় না। read()readlines() পুরো ফাইল মেমরিতে লোড করে।
Q4. CSV ফাইল write করার সময় newline="" না দিলে কী সমস্যা হয়?
✅ সঠিক উত্তর: খ) প্রতিটি row-এর পরে extra ফাঁকা লাইন আসবে। Windows-এ csv module ও Python দুজনেই newline যোগ করে, ফলে double newline হয়। newline="" দিলে এই সমস্যা সমাধান হয়।
Q5. csv.DictReader প্রতিটি row কী হিসেবে রিটার্ন করে?
✅ সঠিক উত্তর: গ) Dictionarycsv.DictReader header row-কে key হিসেবে ব্যবহার করে এবং প্রতিটি data row-কে dictionary হিসেবে রিটার্ন করে। যেমন: {"Name": "রহিম", "GPA": "3.75"}
← Previous: স্ট্রিং মেথড Next: এরর হ্যান্ডলিং →