ফাইল কেন পড়া/লেখা দরকার
Program চলাকালীন সব ডেটা RAM-এ থাকে — program বন্ধ হলে সব হারিয়ে যায়। File handling দিয়ে ডেটা disk-এ সংরক্ষণ করা যায়, যাতে পরে আবার ব্যবহার করা যায়।
ফাইল ব্যবহারের ক্ষেত্র
- Data Persistence — ডেটা স্থায়ীভাবে সংরক্ষণ (user settings, scores, records)
- Logging — program-এর কার্যকলাপ রেকর্ড করা (error log, access log)
- Configuration — settings ফাইল পড়া (config.ini, .env)
- Data Exchange — CSV, JSON, XML ফাইল দিয়ে ডেটা আদান-প্রদান
- Report Generation — ফলাফল text/CSV ফাইলে সংরক্ষণ
ফাইল খোলা ও বন্ধ করা
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)
- সমাধান:
withstatement ব্যবহার করুন — এটি 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 = 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 | লাইন বাই লাইন iterate | str (প্রতিটি) | ✅ (সবচেয়ে ভালো) |
# পুরো ফাইল পড়া
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 করতে DictReader ও DictWriter ব্যবহার করা হয় — কোড আরও 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 লেখা
Windows-এ csv.writer ছাড়াও Python নিজে newline যোগ করে, ফলে double newline (ফাঁকা লাইন) আসে। newline="" দিলে Python-এর extra newline বন্ধ হয় এবং csv module নিজে handle করে। সবসময় CSV write-এ newline="" ব্যবহার করুন!