ليه files أصلاً؟
كل variables اللي عملناها لحد دلوقتي بتختفي أول ما program يقفل.
file هو المكان اللي البيانات بتعيش فيه بعد ما program يخلص. ودي بداية التعامل مع بيانات حقيقية — سجلات، قراءات، تقارير.
قبل أي code — افهم بيحصل إيه
فكرة واحدة في كل خطوة
كل variables اللي عملناها لحد دلوقتي بتختفي أول ما program يقفل.
file هو المكان اللي البيانات بتعيش فيه بعد ما program يخلص. ودي بداية التعامل مع بيانات حقيقية — سجلات، قراءات، تقارير.
open("file.txt") بتفتح file وبترجّع مقبض (handle) — مش محتوى file.
فكّر فيه كإنه «خيط» موصّلك بـ file. عشان توصل للمحتوى بتلف عليه أو بتقرا منه.
مهم: بعد ما تخلص، اقفل file بـ .close() عشان تفضي الموارد.
this is the shape of the code — the sim runs on a ready string
بدل ما تفتكر تقفل file، استخدم with. Python بتقفله لوحدها لما تخرج من الكتلة، حتى لو حصل error في string.
دي الطريقة اللي المبرمجين بيستخدموها فعلًا.
with closes the file by itself
file بيتعامل زي list من السطور. for line in fhand بتدّيك سطر سطر.
كل سطر بييجي ومعاه \n في آخره — عشان كده بنستخدم .strip() قبل ما نشتغل على السطر.
هنا بنحاكي file بـ list سطور عشان تشوف المنطق بالظبط.
Abdelrahman scored 90 Mona scored 78 Omar scored 65
في files الحقيقية مش كل السطور تهمك. بتستخدم if جوّه loop عشان تختار.
ALERT: 39.2 ALERT: 38.8 alert count: 2
open("out.txt", "w") بتفتح للكتابة.
تحذير: الوضع "w" بيمسح محتوى file القديم كله. لو عايز تضيف في الآخر من غير مسح، استخدم "a" (append).
ولاحظ إن .write() مش بتضيف سطر جديد لوحدها — لازم تكتب \n بنفسك.
w = erase and write | a = append at the end
لو الاسم غلط أو file مش موجود، program هيقع بـ FileNotFoundError.
الحل: try/except — نفس اللي اتعلمناه في درس conditions.
file missing.txt not found — check the name
.read() → file كله في string واحد. مريح لـ files الصغيرة، كارثة للكبيرة (بيحمّل كل حاجة في الذاكرة).
.readlines() → list فيها كل السطور. برضه بيحمّل كله.
for line in fhand → سطر سطر، والذاكرة فيها سطر واحد بس في أي لحظة. دي الطريقة الصح لأي file حقيقي.
القاعدة: لو مش متأكد، لف على file سطر سطر.
line count: 3 ← first line ← second line ← third line
CSV مجرد text file، كل سطر فيه values مفصولة بفواصل. وأول سطر غالبًا العناوين.
الخطوات: خد أول سطر كعناوين، بعدين لف على الباقي وقسّم كل سطر، واربط كل value بعنوانها.
ده بالظبط اللي بتعمله library csv — بس لما تعملها بإيدك مرة، هتفهمها للأبد.
Columns: ['name', 'dept', 'grade'] Abdelrahman (IT) ← 90 Mona (CS) ← 78
في files الحقيقية هتلاقي سطر ناقص عمود، أو فيه مسافات زيادة، أو فاضي خالص.
لو ما حميتش code بتاعك، السطر الواحد ده هيوقّع program كله بعد ما يكون شغّال تمام على 999 سطر.
الحماية: افحص عدد الأجزاء بعد split، ونضّف بـ strip، وتجاهل اللي مش مظبوط.
bad row: [] bad row: [Mona] good rows: 2
الفكرة دي أسهل ما تتشاف من ما تتقرا
شوف إزاي بنفكّر قبل ما نكتب
نفكّر إزاي؟
.strip() بيبقى string فاضي#.نفكّر إزاي؟
.strip()# → continueنفكّر إزاي؟
.split(",")int()نفكّر إزاي؟
\n بتنزل سطر جوّه stringout.write(report) مرة واحدةنفكّر إزاي؟
open بتطلّع FileNotFoundError لو الاسم غلطtryنفكّر إزاي؟
ارجعلها وإنت بتحل — مش محتاج تحفظها
شوفه بيشتغل سطر سطر
شوفها هنا بدل ما تضيّع ساعة فيها
فكّر الأول — بعدين اكشف
إيه اللي open("a.txt") بترجّعه؟
ليه بيظهر سطر فاضي بين كل سطرين؟
إيه الناتج؟
الوضع "w" بيعمل إيه لو file فيه بيانات؟
إيه type parts[1] هنا؟
إيه فايدة with؟
إيه اللي هيتطبع؟
إيه error اللي بيحصل لو file مش موجود؟
اكتب code — ده الجزء اللي بيعلّم فعلاً
عندك list سطور كل واحد فيه «اسم,درجة». اطبع اسم أعلى طالب بس.
عندك سطور سجل زي "ALERT: 39.2" و "OK: 36.5". اطبع عدد التنبيهات ومتوسط قراءات التنبيهات بس.
كل سطر فيه «اسم,قسم,درجة». اطبع أسماء طلبة قسم IT بس مع درجاتهم.
جهّز string تقرير فيه عنوان وخط فاصل وكل سطر بيانات، واطبعه (كأنك هتكتبه في file).
كل إجابة معاها السبب
إيه أحسن طريقة تقرا file كبير جدًا؟
إيه type parts[1] هنا؟
إيه فايدة with open(...) as f: ؟
إيه اللي هيتطبع؟
إيه اللي open("data.txt") بترجّعه؟
ليه بنستخدم .strip() مع سطور file؟
إيه الفرق بين الوضع "w" و "a"؟