Pe scurt
În Python, open deschide un fișier, iar construcția with îl închide la ieșirea din bloc. Modul "r" citește, "w" scrie înlocuind conținutul existent, iar "a" adaugă la sfârșit. Este util să alegi explicit codarea textului, de exemplu UTF-8.
În detaliu
În Python, funcția open deschide un fișier și întoarce un obiect-flux, iar construcția with îl închide automat la ieșirea din bloc, chiar dacă apare o excepție. Modul "r" citește, "w" scrie înlocuind conținutul existent, iar "a" adaugă la sfârșit. În mod text, obiectul întors de open este în mod obișnuit un TextIOWrapper: el decodează octeții conform codării alese și oferă metodele read(), readline() și write(). Este util să alegi explicit codarea, de exemplu encoding="utf-8". Metoda read() întoarce text, nu numere: conversia la int se face explicit. Lipsa fișierului produce FileNotFoundError, iar un text nenumeric dă ValueError la conversie.
Exemplul 1 — suma numerelor din fișier. Fișierul date.txt conține 3 5:
with open("date.txt", "r", encoding="utf-8") as f:
numere = [int(x) for x in f.read().split()]
print(sum(numere))
split() produce textele „3” și „5”, int le transformă în numere, iar sum dă 8, care se afișează. read() încarcă întregul conținut; pentru fișiere mari, parcurgerea pe linii evită încărcarea integrală în memorie.
Exemplul 2 — citire pe linii și scriere. Fișierul elevi.txt conține liniile Ana 9 și Dan 7. Programul parcurge fișierul linie cu linie, separă numele de notă, calculează media și o scrie în alt fișier, pe care apoi îl citește pentru verificare:
note = []
with open("elevi.txt", encoding="utf-8") as f:
for linie in f:
nume, nota = linie.split()
note.append(int(nota))
with open("rezultat.txt", "w", encoding="utf-8") as g:
g.write(str(sum(note) / len(note)))
with open("rezultat.txt", encoding="utf-8") as g:
print(g.read())
Se afișează 8.0. Parcurgerea for linie in f dă pe rând liniile Ana 9 și Dan 7, fiecare cu sfârșitul de linie la capăt; split() îl ignoră. Media este . Metoda write primește text, deci numărul se transformă mai întâi cu str; fără această conversie apare o eroare de tip.
Pentru scriere se poate folosi și print(valoare, file=g), care adaugă automat sfârșitul de linie, spre deosebire de g.write(text). Metoda readline() citește o singură linie, iar readlines() întoarce lista tuturor liniilor. Mai multe fișiere se pot deschide în același with, separate prin virgulă. Dacă fișierul conține o valoare pe linie, int(linie) ignoră sfârșitul de linie, dar linie fără conversie îl conține.
Exemplul 3 — modurile de deschidere și lipsa fișierului.
with open("m.txt", "w") as f:
f.write("7")
with open("m.txt", "a") as f:
f.write("5")
with open("m.txt") as f:
print(f.read())
with open("m.txt", "w") as f:
f.write("1")
with open("m.txt") as f:
print(f.read())
try:
open("lipsa.txt")
except FileNotFoundError:
print("lipsește")
Se afișează 75, apoi 1, apoi lipsește. Modul "a" adaugă 5 după 7, deci fișierul conține textul 75, iar nu suma 12. Reluarea modului "w" înlocuiește tot conținutul cu 1. Excepția FileNotFoundError este prinsă de blocul except, deci programul continuă.
Exemplul 4 — o linie goală și conversia. Fișierul valori.txt conține liniile 4, 10, o linie goală și 6. Programul calculează suma valorilor:
suma = 0
with open("valori.txt", encoding="utf-8") as f:
for linie in f:
linie = linie.strip()
if linie == "":
continue
suma += int(linie)
print(suma)
Se afișează 20. Metoda strip() scoate spațiile și sfârșitul de linie de la capetele textului, deci linia goală devine șirul vid, pe care instrucțiunea continue îl sare. Conversia int("") ar produce ValueError. Fără strip(), linia goală ar fi "\n", testul linie == "" nu ar prinde-o, iar int("\n") ar produce aceeași eroare.
Poziția de citire. Parcurgerea for linie in f consumă fișierul o singură dată: o a doua parcurgere în același bloc with nu mai găsește nicio linie, pentru că poziția de citire a rămas la sfârșit. Pentru a citi din nou, fișierul se deschide încă o dată. De asemenea, un nume de fișier fără cale este căutat în directorul curent al programului, nu în directorul în care se află scriptul.
Un fișier deschis cu "w" este creat dacă nu există.
Greșeli frecvente
- Greșit:
f.read()întoarce direct numere întregi.Corect: întoarce text. - Greșit:
"w"adaugă la sfârșitul conținutului vechi.Corect: îl înlocuiește. - Greșit: blocul
withtrebuie urmat mereu def.close()manual.Corect: gestionează închiderea la ieșire.
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633 și 1653–1654; OMEC 4370/2026, anexa 8, p. 155–156; rocnee.eu
- OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633; rocnee.eu
- OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1653–1654; rocnee.eu
Documente consultate
- Programele școlare noi de informatică pentru clasele X–XII (OMEC 4370/2026, MO 591 bis/20.07.2026), CNCE, p. 155–156; rocnee.eu
- Python Software Foundation, Python Tutorial, capitolul 7.2 „Reading and Writing Files”, docs.python.org/3/tutorial/inputoutput.html
Desene: Redactare proprie (desen original), conform OMEC 4370/2026, Informatică IX intensiv; rocnee.eu
