অধ্যায় 3 · আসল প্রোগ্রাম লেখা
ফাইল, JSON ও CSV
- পৃষ্ঠা 10 / 20
- 4 মিনিট পড়া
প্রোগ্রাম বন্ধ হলেই সব ভুলে যায়। ডেটা রেখে দিতে — আপনার নোট, একটা ডেটাসেট, মডেলের দেওয়া উত্তর — সেটা একটা ফাইলে লিখতে হয়। AI-এর কাজ ফাইলে ভরা: ট্রেনিং ডেটার CSV স্প্রেডশিট, JSON কনফিগারেশন, ফাইন-টিউনিংয়ের JSON Lines ডেটাসেট। এই পাতায় তিনটাই আছে।
টেক্সট ফাইল পড়া আর লেখা
from pathlib import Path
notes = Path("notes.txt")
# লেখা (ফাইল বানায়, বা আগেরটা মুছে নতুন করে)
with open(notes, "w", encoding="utf-8") as f:
f.write("Python is fun\n")
f.write("পাইথন শেখা সহজ\n")
# শেষে একটা লাইন যোগ
with open(notes, "a", encoding="utf-8") as f:
f.write("Files are easy\n")
# লাইন ধরে ধরে পড়া
with open(notes, encoding="utf-8") as f:
for number, line in enumerate(f, start=1):
print(number, line.rstrip())
print(notes.exists(), notes.suffix, notes.stat().st_size, "bytes")1 Python is fun
2 পাইথন শেখা সহজ
3 Files are easy
True .txt 68 byteswith open(...) as f:ফাইলটা খোলে আর অংশটা শেষ হলে সবসময় বন্ধ করে, মাঝে এরর হলেও। সবসময়withব্যবহার করুন।- মোড:
"r"পড়া (ডিফল্ট),"w"লেখা — পুরো ফাইলটা মুছে নতুন করে লেখে,"a"শেষে যোগ করা। encoding="utf-8": সবসময় লিখুন। না লিখলে Windows পুরোনো এনকোডিং ব্যবহার করতে পারে, আর বাংলা লেখা হিজিবিজি হয়ে যায় বাUnicodeDecodeErrorদিয়ে থেমে যায়।pathlib.Pathএকটা ফাইলের পথ বোঝায় আর Windows, macOS, Linux-এ একইভাবে কাজ করে। খেয়াল করুন, বাংলা লাইনটা তার ১৪টা অক্ষরের চেয়ে বেশি বাইট নিয়েছে — UTF-8 প্রতিটা বাংলা অক্ষরে ৩ বাইট ব্যবহার করে।
JSON: API-এর ভাষা
JSON (JavaScript Object Notation) হলো গোছানো ডেটার একটা লেখা-ফরম্যাট। দেখতে প্রায় হুবহু Python-এর ডিকশনারি আর লিস্টের মতো, আর প্রতিটা AI API এটাই পাঠায় ও নেয়। json মডিউল দুই দিকেই রূপান্তর করে:
import json
settings = {
"model": "gpt-5.5",
"temperature": 0.2,
"languages": ["en", "bn"],
"greeting": "স্বাগতম",
}
# Python → ফাইলে JSON লেখা
with open("settings.json", "w", encoding="utf-8") as f:
json.dump(settings, f, ensure_ascii=False, indent=2)
# JSON লেখা → Python
with open("settings.json", encoding="utf-8") as f:
loaded = json.load(f)
print(loaded["languages"][1], loaded["greeting"])
print(json.dumps({"ok": True, "items": None})) # ফাইলে নয়, স্ট্রিংয়েbn স্বাগতম
{"ok": true, "items": null}যে ফাইলটা লেখা হলো, settings.json:
{
"model": "gpt-5.5",
"temperature": 0.2,
"languages": [
"en",
"bn"
],
"greeting": "স্বাগতম"
}| ফাংশন | কাজ |
|---|---|
json.dump(obj, file) / json.load(file) | Python ↔ একটা JSON ফাইল |
json.dumps(obj) / json.loads(text) | Python ↔ একটা JSON স্ট্রিং ("s" মানে string) |
ছোট পার্থক্যগুলো খেয়াল করুন: Python-এর True, False আর None-এর জায়গায় JSON লেখে true, false আর null। ensure_ascii=False ফাইলে বাংলাকে \u09b8-এর মতো কোডে না বদলে পড়ার মতো রাখে, আর indent=2 সুন্দর করে সাজায়।
CSV: লেখা হিসেবে স্প্রেডশিট
CSV (comma-separated values) ফাইল হলো সাধারণ লেখায় একটা টেবিল — Excel বা Google Sheets থেকে এক্সপোর্ট করলে যা পান। এই যে reviews.csv:
product,stars,comment
Headphones,5,Great sound
Charger,2,Stopped working
Keyboard,4,Nice to type oncsv.DictReader প্রথম লাইনকে key ধরে প্রতিটা সারিকে একটা ডিকশনারি বানায়:
import csv
with open("reviews.csv", newline="", encoding="utf-8") as f:
rows = list(csv.DictReader(f))
print(len(rows), "rows")
print(rows[0])
positive = [r for r in rows if int(r["stars"]) >= 4]
print([r["product"] for r in positive])3 rows
{'product': 'Headphones', 'stars': '5', 'comment': 'Great sound'}
['Headphones', 'Keyboard']CSV থেকে পড়া সবকিছুই লেখা — তাই int(r["stars"]) লিখেছি। বড় টেবিলের জন্য ব্যবহার করবেন pandas (পাতা ১৪), যা এই রূপান্তরগুলো নিজেই করে।
JSON Lines: প্রতি লাইনে একটা রেকর্ড
AI ডেটাসেট — ফাইন-টিউনিং ডেটা, মূল্যায়নের সেট, ব্যাচ API জব — সাধারণত ব্যবহার করে JSON Lines (.jsonl): প্রতি লাইনে একটা পূর্ণ JSON অবজেক্ট। পুরো ফাইল নতুন করে না লিখেই একটা লাইন যোগ করা যায়, আর বিশাল ফাইলও এক লাইন করে পড়া যায়:
import json
examples = [
{"prompt": "2 + 2", "answer": "4"},
{"prompt": "Capital of Bangladesh", "answer": "Dhaka"},
]
with open("dataset.jsonl", "w", encoding="utf-8") as f:
for row in examples:
f.write(json.dumps(row, ensure_ascii=False) + "\n")
with open("dataset.jsonl", encoding="utf-8") as f:
for line in f:
row = json.loads(line)
print(row["prompt"], "->", row["answer"])2 + 2 -> 4
Capital of Bangladesh -> Dhakaনিজে চেষ্টা করুন
- পছন্দের পাঁচটা উক্তি
quotes.txt-এ প্রতি লাইনে একটা করে লিখুন, তারপর পড়ে সবচেয়ে লম্বাটা প্রিন্ট করুন। - পড়ার পরিকল্পনার একটা ডিকশনারি (বিষয় → ঘণ্টা) JSON হিসেবে রাখুন, আবার লোড করে মোট ঘণ্টা প্রিন্ট করুন।
reviews.csvথেকে শুধু ৩-এর কম স্টারের রিভিউ নিয়ে নতুন ফাইলbad_reviews.jsonlলিখুন।