Să combine citirea și scrierea în aceeași problemă
să combine citirea și scrierea în aceeași problemă.
Citire, transformare, filtrare și scriere; flux complet de date
să combine citirea și scrierea în aceeași problemă.
să prelucreze linii citite dintr-un fișier.
să filtreze datele după o condiție.
să construiască un fișier de ieșire din datele prelucrate.
Care este fluxul general?
Fișierele devin utile algoritmic atunci când datele memorate pot fi transformate. Un flux tipic este: deschidere → citire → prelucrare → scriere → închidere.
Filtrarea înseamnă păstrarea numai a valorilor care respectă o condiție. De exemplu, dintr-un fișier cu numere păstrăm doar valorile pare.
Liniile pot fi curățate cu strip(), iar apoi pot fi comparate sau transformate. Pentru calcule, textul numeric trebuie convertit.
De ce este recomandat with open()?
Un profesor primește un fișier cu toate notele și creează un al doilea fișier doar cu elevii care au promovat. Acesta este exact fluxul citire → decizie → scriere.
Rezultatul va apărea aici.
Ordinea corectă: Deschide → Citește → Transformă → Scrie.
f_in = open("numere.txt", "r")
f_out = open("pare.txt", "w")
for linie in f_in:
x = int(linie.strip())
if x % 2 == 0:
f_out.write(str(x) + "\n")
f_in.close()
f_out.close()Forma with open(...) as f închide automat fișierul la ieșirea din bloc. Ea va fi folosită ca practică recomandată pentru programele mai sigure.
with open("numere.txt", "r") as f_in, open("pare.txt", "w") as f_out:
for linie in f_in:
x = int(linie.strip())
if x % 2 == 0:
f_out.write(str(x) + "\n")ALGORITM Filtrare
deschide fișierul de intrare pentru citire
deschide fișierul de ieșire pentru scriere
pentru fiecare linie execută
transformă linia în valoare
dacă valoarea respectă condiția atunci
scrie valoarea în fișierul de ieșire
sfârșit dacă
sfârșit pentru
închide fișierele
SFÂRȘIT ALGORITMPentru două fișiere, asigură-te că știi care este sursa și care este destinația.
Dacă fișierul de ieșire este deschis cu w, conținutul vechi este înlocuit.
Tratarea datelor invalide poate necesita try/except; nu presupune că toate liniile sunt perfecte.
Cazul fișierului gol trebuie testat.
with open(...) as ... este recomandat deoarece închiderea este gestionată automat.
Problemă: Din numere.txt, creează pozitive.txt care conține doar numerele strict pozitive.
Intrare: numere întregi, câte unul pe linie. Prelucrare: convertim fiecare linie și testăm x > 0. Ieșire: valorile pozitive, câte una pe linie.
ALGORITM Filtrare
deschide fișierul de intrare pentru citire
deschide fișierul de ieșire pentru scriere
pentru fiecare linie execută
transformă linia în valoare
dacă valoarea respectă condiția atunci
scrie valoarea în fișierul de ieșire
sfârșit dacă
sfârșit pentru
închide fișierele
SFÂRȘIT ALGORITMwith open("numere.txt", "r") as f_in, open("pozitive.txt", "w") as f_out:
for linie in f_in:
x = int(linie.strip())
if x > 0:
f_out.write(str(x) + "\n")Urmărirea variabilelor
Pentru -2, 5, 0, 7: -2 este respins; 5 este scris; 0 este respins; 7 este scris. Fișierul rezultat conține 5 și 7.
Testare
Testează valori mixte, toate negative, toate pozitive, numai zero și fișier gol.
Verificare
Fiecare valoare din fișierul rezultat trebuie să respecte x > 0, iar fiecare valoare pozitivă din intrare trebuie să apară în ieșire.
read().1. Care este fluxul general?
2. Ce condiție selectează valorile pare?
3. Ce face strip()?
4. Ce avantaj are with open()?
5. Ce mod este potrivit pentru un fișier de ieșire rescris complet?
6. Ce caz trebuie testat explicit?
Mini-proiect – „Prelucrator de rezultate”. Ai un fișier rezultate.txt cu valori numerice. Creează un program care generează trei fișiere: pare.txt, impare.txt și statistica.txt. În statistica.txt scrie numărul valorilor, suma, minimul și maximul. Tratează fișierul gol și verifică rezultatele cu cel puțin cinci seturi de test.
Verifică implementarea, rezultatul fișierelor și testele relevante înainte de finalizare.