Școala Româno-Britanică
Modulul 5 Clasa a IX-a | Python

Ora 5: Fișiere text în Python

Ce vei învăța astăzi: open, read, write, close; noțiunea de sfârșit de fișier

Rezultat practic: Citești și scrii fișiere text cu open, read, write și close și gestionezi sfârșitul de fișier (Competența 5.5).

Competența 5.5 Săptămâna 26

Înainte de a începe

De ce contează? Datele citite de la tastatură dispar la fiecare rulare, pe când un fișier păstrează informația pe disc, așa cum cere orice aplicație reală și orice problemă de test cu fișiere.

Ce știi deja?

Până acum ai citit date cu input() și ai afișat rezultate cu print(). Ce crezi că se întâmplă cu datele introduse după ce programul se oprește?

Ideea-cheie: Un fișier se folosește în trei pași obligatorii: open() îl deschide, read() sau write() lucrează cu el, iar close() îl închide.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

Ce vei învăța astăzi?

După această lecție vei învăța să deschizi, citești, scrii și închizi fișiere text (documente salvate pe disc, care păstrează datele și după oprirea programului) în Python, folosind funcțiile open, read, write și close.

De ce folosim fișiere în programe
Deschiderea cu open() și modurile r, w, a (citire, scriere, adăugare)
Citirea: read(), readline(), readlines()
Scrierea cu write() și închiderea cu close()
Noțiunea de sfârșit de fișier (EOF = punctul după care nu mai există date de citit)

De ce folosim fișiere?

Un program care citește date doar de la tastatură pierde datele la fiecare rulare. Cu fișiere text putem salva date pe disc, le citim la reluare și le transmitem altor programe.

Analogie:

Fișierul este ca un caiet de notițe. În loc să ții totul în minte (memorie), îți notezi pe hârtie (disc) ca să nu uiți, chiar dacă te oprești o zi.

Deschiderea fișierului cu open()

Funcția open() deschide un fișier. Primul argument este numele fișierului, iar al doilea este modul: "r" pentru citire, "w" pentru scriere (șterge conținutul vechi), "a" pentru adăugare la sfârșit.

ModNumeCe face
"r"readDeschide fișierul pentru citire
"w"writeDeschide fișierul pentru scriere (îl șterge pe cel vechi)
"a"appendDeschide fișierul pentru adăugare la sfârșit
Exemplu - deschiderea unui fișier
f = open("date.in", "r")   # deschidem pentru citire
g = open("rezultat.out", "w")  # deschidem pentru scriere

Citirea și scrierea în fișier

Pentru citire folosim read() (tot conținutul), readline() (o linie) sau readlines() (toate liniile într-o listă). Pentru scriere folosim write(). După lucru, închidem fișierul cu close().

Start program deschide fisierul "date.in" pentru citire citeste n <- prima linie a fisierului citeste v <- numerele de pe a doua linie inchide fisierul scrie suma elementelor lui v Stop program
Exemplu complet - suma numerelor dintr-un fișier
f = open("date.in", "r")

n = int(f.readline())
v = list(map(int, f.readline().split()))

f.close()

print(sum(v))

Reține: la final, fișierul se închide cu close(). Când bucla for parcurge un fișier, fiecare iterație dă câte o linie, până la sfârșitul fișierului (EOF).

Exercițiu de completare

Completează enunțul cu cuvintele potrivite:

Deschidem un fișier cu funcția ______(). Pentru citire folosim modul ______. Conținutul fișierului îl citim cu ______(), iar pentru a scrie în fișier folosim ______(). La final închidem fișierul cu ______().

Bancă de cuvinte:
open r read write close

Test de înțelegere

Test rapid - fișiere text în Python:

1. Deschidem un fișier în Python cu funcția:

2. Modul folosit pentru citirea unui fișier este:

3. Închidem fișierul cu instrucțiunea:

Test suplimentar

Test suplimentar - fișiere text:

1. Deschidem un fișier pentru scriere cu modul:

2. Care secvență scrie corect textul în fișierul f?

3. Metoda care citește tot conținutul unui fișier este:

Ai grijă la: Modulul "w" șterge conținutul vechi al fișierului: dacă deschizi din greșeală cu "w" un fișier de la care trebuia doar să citești, îl golești pe loc.

Aprofundare

Context manager-ul with: with open("date.in", "r") as f: închide fișierul automat la ieșirea din bloc, chiar și când apare o eroare. Este varianta recomandată în Python modern, dar la nivel de clasă se folosește explicit open/close pentru a înțelege mecanismul.

  • Parcurgerea până la EOF: for linie in f: citește fișierul linie cu linie până la sfârșit (End Of File), fără să cunoaștem numărul de linii.
  • Curățarea liniilor: linie.strip() elimină spațiile și caracterul de linie nouă (\n); conversia se face cu int(linie).
  • Modurile avansate: "a" adaugă la sfârșit fără să șteargă, "r+" permite citire și scriere în același fișier.
  • Fișier inexistent: la citirea unui fișier care nu există primim FileNotFoundError; îl prindem cu try/except.
  • Diacritice: pentru texte cu diacritice, deschidem cu encoding="utf-8".
APLICARE ȘI REZOLVARE DE PROBLEME

PbInfo - Suma numerelor dintr-un fișier

Enunț:

Cerință: Fișierul "date.in" conține pe prima linie un număr n, iar pe a doua linie n numere. Să se scrie în fișierul "date.out" suma acestor numere.

Date de intrare:

Programul citește datele din fișierul "date.in".

Date de ieșire:

Programul scrie în fișierul "date.out" suma numerelor.

Restricții și precizări:

Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.

Exemplu:

Intrare:

5
7 9 8 10 6

Ieșire:

40
Cum gândim soluția:
  1. Deschidem "date.in" pentru citire cu open("date.in", "r")
  2. Citim n și lista de numere cu readline
  3. Închidem fișierul de citire cu close()
  4. Deschidem "date.out" pentru scriere și scriem suma cu write
Scrie soluția în Python:
Soluție corectă:
Soluția completă
f = open("date.in")
n = int(f.readline())
v = list(map(int, f.readline().split()))
f.close()

g = open("date.out", "w")
g.write(str(sum(v)))
g.close()

Ce învățăm: citirea și scrierea se fac prin obiecte-fișier, iar suma o calculăm cu funcția predefinită sum.

PbInfo - Cea mai mare valoare din fișier

Enunț:

Cerință: Fișierul "date.in" conține pe prima linie un număr n, iar pe a doua linie n numere. Să se scrie în fișierul "date.out" cea mai mare valoare.

Date de intrare:

Programul citește datele din fișierul "date.in".

Date de ieșire:

Programul scrie în fișierul "date.out" maximul dintre numere.

Restricții și precizări:

Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.

Exemplu:

Intrare:

5
3 9 5 1 7

Ieșire:

9
Cum gândim soluția:
  1. Deschidem "date.in" pentru citire
  2. Citim n și lista de numere
  3. Calculăm maximul cu max(v)
  4. Scriem rezultatul în "date.out" și închidem
Scrie soluția în Python:
Soluție corectă:
Soluția completă
f = open("date.in")
n = int(f.readline())
v = list(map(int, f.readline().split()))
f.close()

g = open("date.out", "w")
g.write(str(max(v)))
g.close()

Ce învățăm: aceeași structură cu cea de la sumă, dar rezultatul îl obținem cu max.

EXERCIȚII PRACTICE

Exercițiul Practic: Lucrul cu fișiere text

Sarcini de lucru

Scrie și citește fișiere text în două programe complete

Sarcina 1: Pătratele primelor n numere

Cerință: Scrie un program care citește n de la tastatură și scrie în fișierul "patrate.out" pătratele primelor n numere naturale (de la 1 la n), separate prin spații, folosind modul "w".

Soluție:
n = int(input())

f = open("patrate.out", "w")
for i in range(1, n + 1):
    f.write(str(i * i) + " ")

f.close()

Verifică: bucla for scrie fiecare pătrat în fișier, iar fișierul se închide la final cu close().

Sarcina 2: Numărul de linii ale unui fișier

Cerință: Scrie un program care parcurge fișierul "text.in" linie cu linie (până la sfârșitul fișierului, EOF) și afișează numărul de linii.

Soluție:
f = open("text.in")

nr_linii = 0
for linie in f:
    nr_linii = nr_linii + 1

f.close()

print(nr_linii)

Verifică: bucla for parcurge automat fișierul până la EOF, o iterație pentru fiecare linie.

Scrie pe caiet - De reținut

Titlul lecției

Fișiere text în Python.

Definiția lecției

Un fișier text este un document salvat pe disc, care păstrează informația și după oprirea programului. Lucrul cu fișiere urmează trei pași obligatorii: deschiderea cu open(), prelucrarea cu read() sau write() și închiderea cu close(). La deschidere alegem modul: "r" pentru citire, "w" pentru scriere (șterge conținutul vechi) și "a" pentru adăugare la sfârșit. Citirea se face cu read() (tot conținutul), readline() (o linie) sau readlines() (toate liniile într-o listă), iar scrierea cu write(), convertind numerele cu str(x). Bucla for parcurge fișierul linie cu linie până la sfârșitul fișierului, numit EOF.

Definiții esențiale

Algoritmul cheie - pseudocod

Start program deschide fisierul "date.in" pentru citire citeste n <- prima linie a fisierului citeste v <- numerele de pe a doua linie inchide fisierul scrie suma elementelor lui v Stop program

Algoritmul cheie - cod Python

f = open("date.in", "r")

n = int(f.readline())
v = list(map(int, f.readline().split()))

f.close()

print(sum(v))

Greșeli comune de evitat

Exemplu practic

Un jurnal de antrenament salvează distanțele parcurse zilnic, câte una pe linie, ca datele să rămână pe disc după oprirea programului:

f = open("distante.txt", "w")
f.write("5\n")
f.write("8\n")
f.write("6\n")
f.close()

g = open("distante.txt", "r")
for linie in g:
    print(linie.strip())
g.close()

Sfaturi practice și trucuri