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?
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.
| Mod | Nume | Ce face |
|---|---|---|
| "r" | read | Deschide fișierul pentru citire |
| "w" | write | Deschide fișierul pentru scriere (îl șterge pe cel vechi) |
| "a" | append | Deschide fișierul pentru adăugare la sfârșit |
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().
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:
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:
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 cuint(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".
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:
- Deschidem "date.in" pentru citire cu
open("date.in", "r") - Citim n și lista de numere cu readline
- Închidem fișierul de citire cu close()
- Deschidem "date.out" pentru scriere și scriem suma cu write
Scrie soluția în Python:
Soluție corectă:
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:
- Deschidem "date.in" pentru citire
- Citim n și lista de numere
- Calculăm maximul cu
max(v) - Scriem rezultatul în "date.out" și închidem
Scrie soluția în Python:
Soluție corectă:
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ț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.