Hot Post

6/recent/ticker-posts

Header Ads Widget

Python শেখার সিরিজ — পর্ব ১০ / ২০ (File Handling)

🐍 Python শেখার সিরিজ — পর্ব ১০ / ২০
python learning

File Handling
File খোলা, পড়া ও লেখা — open(), with statement, Text ও CSV File, os module এবং Diary App প্রজেক্ট সহ বিস্তারিত বাংলায়
⏱ পড়তে সময় ~১৭ মিনিট 🎯 Beginner Friendly 🐍 Python 3.x

এতদিন আমাদের প্রোগ্রাম বন্ধ হলে সব ডেটা হারিয়ে যেত। কিন্তু বাস্তব জীবনে ডেটা সংরক্ষণ করতে হয় — যেমন ব্যবহারকারীর তথ্য, লগ ফাইল, সেটিংস। এই কাজের জন্যই Python-এ আছে File Handling

📁 File Handling কী এবং কেন দরকার?

File Handling হলো Python দিয়ে Computer-এর File তৈরি করা, পড়া, লেখা এবং মুছে ফেলার পদ্ধতি। প্রোগ্রাম বন্ধ হলেও File-এর ডেটা টিকে থাকে।

কাজউদাহরণ
ডেটা সংরক্ষণUser-এর প্রোফাইল, গেমের Score সেভ করা
Log তৈরিকখন কে Login করেছে রেকর্ড রাখা
ConfigurationApp-এর Settings .txt বা .cfg ফাইলে
Data ProcessingCSV থেকে ডেটা পড়ে বিশ্লেষণ করা
Report তৈরিহিসাব-নিকাশের রিপোর্ট File-এ লেখা

Python-এ File Handle করার সাধারণ ধাপ:

💡

১. File খোলো২. কাজ করো (পড়ো বা লেখো)৩. File বন্ধ করো। সবচেয়ে নিরাপদ পদ্ধতি হলো with statement — এটি স্বয়ংক্রিয়ভাবে File বন্ধ করে দেয়।

🔑 File খোলার Mode

open(filename, mode) ফাংশন দিয়ে File খোলা হয়। Mode নির্ধারণ করে File-এর সাথে কী করা যাবে।

"r"শুধু পড়া
(default)
না থাকলে Error
"w"শুধু লেখা
নতুন তৈরি বা
পুরনোটা মুছে
"a"Append
শেষে যোগ করে
পুরনো রাখে
"x"নতুন তৈরি
আগে থাকলে
Error
"rb"Binary পড়া
image/pdf
এর জন্য
"wb"Binary লেখা
image/pdf
এর জন্য
"r+"পড়া ও লেখা
উভয়
File থাকতে হবে
"w+"পড়া ও লেখা
পুরনোটা
মুছে
⚠️

"w" mode সাবধান! "w" mode দিয়ে File খুললে আগের সব তথ্য মুছে যায়। পুরনো তথ্য রেখে নতুন যোগ করতে "a" mode ব্যবহার করো।

✍️ File লেখা — write() ও writelines()
Python — File লেখা
# পদ্ধতি ১: সরাসরি open/close
f = open("students.txt", "w", encoding="utf-8")
f.write("রাহিম করিম 85\n")
f.write("সালমা আক্তার 91\n")
f.write("করিম উদ্দিন 72\n")
f.close()    # অবশ্যই বন্ধ করতে হবে!
print("✅ students.txt লেখা হয়েছে।")

# writelines() — List থেকে একসাথে লেখা
lines = [
    "নাম: রাহিম\n",
    "বয়স: 22\n",
    "শহর: ঢাকা\n",
]
f2 = open("profile.txt", "w", encoding="utf-8")
f2.writelines(lines)
f2.close()
print("✅ profile.txt লেখা হয়েছে।")
✔ আউটপুট
✅ students.txt লেখা হয়েছে।
✅ profile.txt লেখা হয়েছে।

File-এর ভেতরে এখন এই তথ্য আছে:

📄 students.txt
রাহিম করিম 85 সালমা আক্তার 91 করিম উদ্দিন 72

বাংলা বা অন্য Unicode text লিখতে encoding="utf-8" ব্যবহার করো। এটি না দিলে বাংলা text সঠিকভাবে সংরক্ষিত হবে না।

📖 File পড়া — read(), readline(), readlines()
Python — তিনটি পড়ার পদ্ধতি
# পদ্ধতি ১: read() — সম্পূর্ণ File একবারে
f = open("students.txt", "r", encoding="utf-8")
content = f.read()
f.close()
print("=== read() ===")
print(content)

# পদ্ধতি ২: readline() — এক লাইন করে
f = open("students.txt", "r", encoding="utf-8")
print("=== readline() ===")
print(f.readline(), end="")   # ১ম লাইন
print(f.readline(), end="")   # ২য় লাইন
f.close()

# পদ্ধতি ৩: readlines() — List হিসেবে
f = open("students.txt", "r", encoding="utf-8")
all_lines = f.readlines()
f.close()
print("=== readlines() ===")
print(all_lines)
print(f"মোট লাইন: {len(all_lines)}")

# Loop দিয়ে পড়া — সবচেয়ে ভালো পদ্ধতি
f = open("students.txt", "r", encoding="utf-8")
print("=== Loop দিয়ে ===")
for i, line in enumerate(f, 1):
    print(f"{i}. {line.strip()}")
f.close()
✔ আউটপুট
=== read() ===
রাহিম করিম 85
সালমা আক্তার 91
করিম উদ্দিন 72

=== readline() ===
রাহিম করিম 85
সালমা আক্তার 91
=== readlines() ===
['রাহিম করিম 85\n', 'সালমা আক্তার 91\n', 'করিম উদ্দিন 72\n']
মোট লাইন: 3
=== Loop দিয়ে ===
1. রাহিম করিম 85
2. সালমা আক্তার 91
3. করিম উদ্দিন 72
Methodফেরত দেয়কখন ব্যবহার
read()একটি Stringছোট File সম্পূর্ণ পড়তে
readline()একটি String (এক লাইন)এক লাইন করে পড়তে
readlines()List of Stringsসব লাইন List-এ নিতে
Loop দিয়েএক লাইন করেবড় File-এর জন্য সেরা
🛡️ with Statement — নিরাপদ File Handling

with statement ব্যবহার করলে File-এর কাজ শেষ হলে Python স্বয়ংক্রিয়ভাবে File বন্ধ করে দেয় — এমনকি Error হলেও।

Python — with Statement (সর্বোত্তম পদ্ধতি)
# with দিয়ে লেখা — f.close() লাগবে না
with open("notes.txt", "w", encoding="utf-8") as f:
    f.write("Python শেখা শুরু করলাম।\n")
    f.write("আজ File Handling শিখলাম।\n")
# এখানে এসে File স্বয়ংক্রিয় বন্ধ
print("✅ লেখা শেষ।")

# with দিয়ে পড়া
with open("notes.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

# একসাথে দুটি File খোলা
with open("source.txt", "r", encoding="utf-8") as src, \
     open("dest.txt",   "w", encoding="utf-8") as dst:
    data = src.read()
    dst.write(data)
    print("✅ File কপি হয়েছে।")
✔ আউটপুট
✅ লেখা শেষ।
Python শেখা শুরু করলাম।
আজ File Handling শিখলাম।

✅ File কপি হয়েছে।

সবসময় with statement ব্যবহার করো। এটি automatically File close করে, Memory leak ও Resource এর সমস্যা এড়ায়।

➕ File-এ Append করা

"a" mode দিয়ে খুললে পুরনো ডেটা না মুছে শেষে নতুন ডেটা যোগ হয়।

Python — Append Mode
# প্রথমে File তৈরি
with open("log.txt", "w", encoding="utf-8") as f:
    f.write("=== Log File ===\n")

# Append করা — পুরনোটা থাকে
with open("log.txt", "a", encoding="utf-8") as f:
    f.write("2026-05-17: রাহিম Login করেছে\n")

with open("log.txt", "a", encoding="utf-8") as f:
    f.write("2026-05-17: সালমা নতুন পোস্ট করেছে\n")

# ফলাফল দেখা
with open("log.txt", "r", encoding="utf-8") as f:
    print(f.read())
✔ log.txt-এর বিষয়বস্তু
=== Log File ===
2026-05-17: রাহিম Login করেছে
2026-05-17: সালমা নতুন পোস্ট করেছে
📊 CSV File পড়া ও লেখা

CSV (Comma-Separated Values) হলো সবচেয়ে সহজ ডেটা ফরম্যাট। Excel, Database — সব জায়গায় ব্যবহার হয়। Python-এর csv Module দিয়ে সহজেই কাজ করা যায়।

Python — CSV লেখা
import csv

# CSV লেখা
students = [
    ["নাম",       "বয়স", "নম্বর"],  # Header
    ["রাহিম",     22,    85],
    ["সালমা",     21,    91],
    ["করিম",      23,    72],
    ["নাসরিন",    20,    88],
]

with open("students.csv", "w",
           newline="", encoding="utf-8-sig") as f:
    writer = csv.writer(f)
    writer.writerows(students)
print("✅ students.csv তৈরি হয়েছে।")
📄 students.csv (তৈরি হওয়া File)
নাম,বয়স,নম্বর রাহিম,22,85 সালমা,21,91 করিম,23,72 নাসরিন,20,88
Python — CSV পড়া
import csv

# CSV পড়া — সাধারণ পদ্ধতি
with open("students.csv", "r", encoding="utf-8-sig") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

print()

# DictReader — Header দিয়ে Access করা যায়
with open("students.csv", "r", encoding="utf-8-sig") as f:
    reader = csv.DictReader(f)
    print(f"{'নাম':12} {'বয়স':6} {'নম্বর'}")
    print("─" * 25)
    for row in reader:
        print(f"{row['নাম']:12} {row['বয়স']:6} {row['নম্বর']}")
✔ আউটপুট
['নাম', 'বয়স', 'নম্বর']
['রাহিম', '22', '85']
['সালমা', '21', '91']
['করিম', '23', '72']
['নাসরিন', '20', '88']

নাম          বয়স    নম্বর
─────────────────────────
রাহিম        22     85
সালমা        21     91
করিম         23     72
নাসরিন       20     88
🗂️ os Module — File ও Directory পরিচালনা

Python-এর os Module দিয়ে File ও Folder-এর উপর অনেক কাজ করা যায়।

Python — os Module
import os

# বর্তমান Directory
print(f"বর্তমান Directory: {os.getcwd()}")

# File আছে কিনা চেক
print(f"notes.txt আছে? {os.path.exists('notes.txt')}")
print(f"ফাইল? {os.path.isfile('notes.txt')}")
print(f"ফোল্ডার? {os.path.isdir('notes.txt')}")

# File-এর আকার (bytes)
if os.path.exists("notes.txt"):
    size = os.path.getsize("notes.txt")
    print(f"File আকার: {size} bytes")

# Directory তৈরি করা
if not os.path.exists("my_folder"):
    os.mkdir("my_folder")
    print("✅ my_folder তৈরি হয়েছে।")

# Directory-র সব File দেখা
files = os.listdir(".")  # "." মানে বর্তমান Directory
txt_files = [f for f in files if f.endswith(".txt")]
print(f"সব .txt File: {txt_files}")

# File নামকরণ
if os.path.exists("notes.txt"):
    os.rename("notes.txt", "my_notes.txt")
    print("✅ notes.txt → my_notes.txt")
🛡️ File Existence চেক ও Error Handling

File না থাকলে Python FileNotFoundError দেয়। এটি এড়াতে আগে File আছে কিনা চেক করো অথবা Exception Handle করো।

Python — Safe File Reading
import os

# পদ্ধতি ১: আগে চেক করো
def safe_read(filename):
    if not os.path.exists(filename):
        return f"❌ '{filename}' পাওয়া যায়নি।"
    with open(filename, "r", encoding="utf-8") as f:
        return f.read()

print(safe_read("students.txt"))
print(safe_read("missing.txt"))

# পদ্ধতি ২: try-except (পর্ব ১১-এ বিস্তারিত)
def read_with_try(filename):
    try:
        with open(filename, "r", encoding="utf-8") as f:
            return f.read()
    except FileNotFoundError:
        return f"❌ File পাওয়া যায়নি: {filename}"
    except PermissionError:
        return f"❌ File পড়ার অনুমতি নেই: {filename}"
    except Exception as e:
        return f"❌ Error: {e}"

print(read_with_try("students.txt"))
print(read_with_try("missing.txt"))
✔ আউটপুট
রাহিম করিম 85
সালমা আক্তার 91
করিম উদ্দিন 72

❌ 'missing.txt' পাওয়া যায়নি।
রাহিম করিম 85
সালমা আক্তার 91
করিম উদ্দিন 72

❌ File পাওয়া যায়নি: missing.txt
📔 প্র্যাকটিক্যাল প্রজেক্ট — Diary App

File Handling-এর সব ধারণা ব্যবহার করে একটি সম্পূর্ণ Diary App তৈরি করি। এন্ট্রি যোগ করো, পড়ো, এবং তারিখ দিয়ে খোঁজো।

💻 প্রজেক্ট: Diary App

প্রতিদিনের ডায়েরি এন্ট্রি File-এ সংরক্ষণ করবে। নতুন লেখা, সব পড়া এবং নির্দিষ্ট তারিখ খোঁজার সুবিধা।

Python — diary_app.py
import os
from datetime import datetime

DIARY_FILE = "diary.txt"

def add_entry(text):
    """নতুন ডায়েরি এন্ট্রি যোগ করে।"""
    now  = datetime.now().strftime("%Y-%m-%d %H:%M")
    entry = f"\n{'='*40}\n📅 {now}\n{'='*40}\n{text}\n"
    with open(DIARY_FILE, "a", encoding="utf-8") as f:
        f.write(entry)
    print(f"✅ এন্ট্রি যোগ হয়েছে ({now})")

def read_all():
    """সব এন্ট্রি দেখায়।"""
    if not os.path.exists(DIARY_FILE):
        print("📔 ডায়েরি এখনো খালি।")
        return
    with open(DIARY_FILE, "r", encoding="utf-8") as f:
        content = f.read()
    print("📔 সব ডায়েরি এন্ট্রি:")
    print(content if content.strip() else "(খালি)")

def search_by_date(date_str):
    """তারিখ দিয়ে খোঁজে (যেমন: 2026-05-17)।"""
    if not os.path.exists(DIARY_FILE):
        print("📔 ডায়েরি এখনো খালি।")
        return
    with open(DIARY_FILE, "r", encoding="utf-8") as f:
        lines = f.readlines()

    found   = False
    in_block= False
    print(f"\n🔍 '{date_str}' তারিখের এন্ট্রি:")
    for line in lines:
        if date_str in line:
            in_block = True
            found    = True
        if in_block:
            print(line, end="")
            if line.strip() == "" and found:
                in_block = False
    if not found:
        print(f"❌ '{date_str}' তারিখে কোনো এন্ট্রি নেই।")

def count_entries():
    """মোট এন্ট্রি গণনা করে।"""
    if not os.path.exists(DIARY_FILE):
        return 0
    with open(DIARY_FILE, "r", encoding="utf-8") as f:
        return f.read().count("📅")

# ── ব্যবহার ──
add_entry("আজ Python-এর File Handling শিখলাম। অনেক মজা লাগল!")
add_entry("with statement ব্যবহার করলে File বন্ধ করতে ভুলতে হয় না।")
add_entry("CSV File পড়া অনেক সহজ। Data Science-এ কাজে লাগবে।")

print(f"\n📊 মোট এন্ট্রি: {count_entries()}")
read_all()
✔ আউটপুট
✅ এন্ট্রি যোগ হয়েছে (2026-05-17 10:30)
✅ এন্ট্রি যোগ হয়েছে (2026-05-17 10:30)
✅ এন্ট্রি যোগ হয়েছে (2026-05-17 10:31)

📊 মোট এন্ট্রি: 3
📔 সব ডায়েরি এন্ট্রি:

========================================
📅 2026-05-17 10:30
========================================
আজ Python-এর File Handling শিখলাম। অনেক মজা লাগল!

========================================
📅 2026-05-17 10:30
========================================
with statement ব্যবহার করলে File বন্ধ করতে ভুলতে হয় না।

========================================
📅 2026-05-17 10:31
========================================
CSV File পড়া অনেক সহজ। Data Science-এ কাজে লাগবে।
📚 এই পর্বে আমরা যা শিখলাম
  • File Handling কী ও কেন দরকার
  • File খোলার Mode — r, w, a, x, rb, wb
  • write() ও writelines() — File-এ লেখা
  • read(), readline(), readlines() — তিনটি পড়ার পদ্ধতি
  • with statement — সর্বোত্তম ও নিরাপদ পদ্ধতি
  • "a" mode দিয়ে Append করা
  • csv Module — CSV File লেখা ও পড়া, DictReader
  • encoding="utf-8" — বাংলা text সঠিকভাবে সংরক্ষণ
  • os Module — getcwd, exists, mkdir, listdir, rename
  • File Existence চেক ও Safe Reading
  • datetime Module — তারিখ ও সময় নেওয়া
  • Diary App প্রজেক্ট
🏋️ নিজে চেষ্টা করো
  1. Word Counter: একটি .txt File পড়ো এবং মোট শব্দ, লাইন ও অক্ষর গণনা করো
  2. Student Manager: CSV File-এ ছাত্রদের তথ্য সংরক্ষণ করো — নতুন যোগ করো, সব দেখাও
  3. Log System: প্রতিটি action-এ সময়সহ log.txt-এ লিখে রাখো
  4. File Backup: একটি File-এর সব content পড়ে .bak extension দিয়ে backup তৈরি করো
  5. Config Reader: key=value format-এর .txt File পড়ে Dictionary-তে রূপান্তর করো
⏭️ পরের পর্বে কী থাকছে? — পর্ব ১১: Exception Handling
  • Exception কী এবং কেন হয়?
  • try, except, else, finally — সম্পূর্ণ কাঠামো
  • বিভিন্ন ধরনের Exception — ValueError, TypeError, KeyError
  • Custom Exception তৈরি করা
  • বাস্তব প্রজেক্ট — Robust Calculator

Post a Comment

0 Comments