Python clasa a 9-a · Manual Python
Laborator Python
LECȚIE · CAPITOLUL 6

6.4 — Prelucrarea fișierelor text

Citire, transformare, filtrare și scriere; flux complet de date

CITEȘTE
→
TRANSFORMĂ
→
FILTREAZĂ
→
SCRIE
01
OBIECTIVE

La finalul lecției vei putea...

01

Să combine citirea și scrierea în aceeași problemă

să combine citirea și scrierea în aceeași problemă.

02

Să prelucreze linii citite dintr-un fișier

să prelucreze linii citite dintr-un fișier.

03

Filtreze datele după o condiție

să filtreze datele după o condiție.

04

Să construiască un fișier de ieșire din datele prelucrate

să construiască un fișier de ieșire din datele prelucrate.

✓
Checkpoint

Care este fluxul general?

02
EXPLICAȚIE

6.4 — Prelucrarea fișierelor text

Fișierele devin utile algoritmic atunci când datele memorate pot fi transformate. Un flux tipic este: deschidere → citire → prelucrare → scriere → închidere.

Filtrarea

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.

Prelucrarea textului

Liniile pot fi curățate cu strip(), iar apoi pot fi comparate sau transformate. Pentru calcule, textul numeric trebuie convertit.

✓
Checkpoint

De ce este recomandat with open()?

03
EXEMPLU INTUITIV

Construim intuiția înaintea problemei

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.

Filtrează valorile

Rezultatul va apărea aici.

Ordinea operațiilor

Ordinea corectă: Deschide → Citește → Transformă → Scrie.

04
PYTHON

Sintaxa și exemplele de bază

Filtrarea numerelor

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()

Variantă cu context manager

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")
05
ALGORITM / PSEUDOCOD

Descrierea algoritmului

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 ALGORITM
06
ATENȚIE!

Erori frecvente și cazuri importante

Pentru 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.

07
EXEMPLU REZOLVAT

Problemă completă

Problemă: Din numere.txt, creează pozitive.txt care conține doar numerele strict pozitive.

Analiză

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 ALGORITM

Algoritm / pseudocod

Python

with 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.

08
EXERCIȚII DE BAZĂ

Aplică direct

  1. 1. Copiază conținutul unui fișier în altul.
  2. 2. Creează un fișier cu numere pare.
  3. 3. Creează un fișier cu numere pozitive.
  4. 4. Numără liniile care conțin valori mai mari decât 10.
  5. 5. Creează un fișier cu pătratele numerelor din fișierul inițial.
09
EXERCIȚII DE APROFUNDARE

Analizează și extinde

  1. 1. Separă numerele pare și impare în două fișiere.
  2. 2. Dintr-un fișier cu note, creează promovati.txt și respinsi.txt.
  3. 3. Elimină liniile goale dintr-un fișier și scrie rezultatul într-un altul.
  4. 4. Prelucrează un fișier cu temperaturi și scrie numai valorile sub 0.
  5. 5. Analizează eficiența soluției care citește linie cu linie față de una care folosește read().
10
VERIFICARE

Quiz final

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?

11
MINI-PROIECT

Prelucrător de rezultate

MISIUNE

Prelucrător de rezultate

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.

Cerințe

pare.txt01
impare.txt02
statistica.txt03
fișier gol04
minimum cinci teste05

Ai terminat lecția?

Verifică implementarea, rezultatul fișierelor și testele relevante înainte de finalizare.