Python for AI/Errors ও Files/Lesson 29
File Handling
Disk-এ data লেখা আর পড়া — open(), mode (r, w, a), লাইন ধরে পড়া, বাংলার জন্য encoding="utf-8", আর pathlib দিয়ে path সামলানো।
- সময়
- 22 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
Variable-এর data থাকে memory-তে — program শেষ হলেই হারিয়ে যায়। Data স্থায়ীভাবে রাখতে হলে file-এ লিখতে হয়।
open(path, mode)— file খোলেwith ... as f:— block শেষে file নিজে থেকে বন্ধ করেf.write()লেখে,f.read()পড়ে
এই playground-এর প্রতিটা run একটা নতুন folder-এ চলে, যেখানে আগের run-এর কোনো file থাকে না (শুধু platform-এর built-in dataset, যেমন
students.csv)। তাই প্রতিটা উদাহরণ আগে নিজের file বানিয়ে নেয়।
কেন দরকার?
- Dataset — প্রায় সব data আসে file থেকে: CSV, JSON, text, ছবি।
- Model save/load — ঘণ্টার পর ঘণ্টা train করা model file-এ save না করলে আবার train করতে হবে।
- Log — training চলাকালে কী হচ্ছে তা file-এ লিখে রাখা।
Mode
| Mode | মানে | File না থাকলে | আগের লেখা |
|---|---|---|---|
"r" | পড়া (default) | FileNotFoundError | থাকে |
"w" | লেখা | নতুন বানায় | মুছে যায় |
"a" | শেষে যোগ (append) | নতুন বানায় | থাকে |
"rb" / "wb" | binary (ছবি, model) | — | — |
পড়ার তিন উপায়
| উপায় | কখন |
|---|---|
f.read() | ছোট file, পুরোটা একবারে |
f.read().splitlines() | লাইনের list চাই, \n ছাড়া |
for line in f: | বড় file — একবারে একটা লাইন memory-তে, ১০ GB file-ও পড়া যায় |
Encoding: বাংলার জন্য জরুরি
Computer অক্ষর রাখে সংখ্যা হিসেবে। কোন অক্ষর কোন সংখ্যা — সেই নিয়মকে বলে encoding। বাংলা সহ পৃথিবীর সব ভাষার জন্য standard হলো UTF-8।
৫টা অক্ষর, কিন্তু ১৫ byte — প্রতিটা বাংলা অক্ষর UTF-8-এ ৩ byte।
encoding="utf-8"না দিলে Python operating system-এর default ব্যবহার করে। Windows-এ সেটা প্রায়ই UTF-8 না — বাংলা file পড়তে গেলেUnicodeDecodeErrorবা ভাঙা অক্ষর। সবসময় লিখে দাও।
pathlib: path নিয়ে কাজ
"data/" + name + ".txt" জোড়া লাগানোর বদলে আধুনিক উপায় — pathlib:
/ দিয়ে path জোড়া লাগে — Windows (\) আর Linux (/) দুটোতেই ঠিকঠাক কাজ করে।
File না থাকলে
Exercise
Exercise
File-এর শব্দ গোনা
count_words(path) function লেখো যেটা একটা text file খুলে তার মোট শব্দ সংখ্যা return করে।
File-এ বাংলা থাকতে পারে, তাই encoding="utf-8" দিয়ে খোলো।
Quiz
Challenge
Challenge
Log file-এর শেষ লাইনগুলো
দুটো function লেখো:
log(path, message)— file-এর শেষে একটা নতুন লাইন যোগ করবে (আগের লাইন মুছবে না)। File না থাকলে বানাবে।tail(path, n)— file-এর শেষ `n`টা লাইন list হিসেবে return করবে, লাইনের শেষের\nছাড়া। File না থাকলে খালি list।
বাস্তবে কোথায় ব্যবহার হয়?
একটা text classification dataset প্রায়ই এভাবে সাজানো থাকে — প্রতিটা class-এর জন্য একটা folder, ভেতরে প্রতিটা sample একটা file। চলো এমন একটা বানিয়ে পড়ি:
PyTorch-এর ImageFolder আর Hugging Face-এর অনেক dataset loader ঠিক এই "folder নাম = label" নিয়মে কাজ করে।
Interview প্রশ্ন
- Beginner:
"w"আর"a"mode-এর পার্থক্য কী? - Intermediate: ১০ GB-র একটা log file কীভাবে পড়বে যাতে memory শেষ না হয়?
- Advanced: Text mode আর binary mode-এর পার্থক্য কী? Model weights কেন binary-তে save হয়?
এরপর কী?
Plain text-এ list বা dictionary রাখা ঝামেলার — আবার পড়ার সময় parse করতে হয়। এর standard সমাধান: পরের lesson JSON।