open() și with în Python

Fișiere Python 3.0+

Deschide un fișier pentru citire sau scriere; cu with, fișierul este închis automat.

Sintaxă
with open(fisier, mode='r', encoding='utf-8') as f:
    ...

Ce face open() și with

open() deschide un fișier și returnează un obiect prin care citești (read(), readline(), parcurgere cu for) sau scrii (write()). Modul spune ce faci: 'r' citire, 'w' scriere (șterge conținutul vechi), 'a' adăugare la final, 'x' creare (eroare dacă fișierul există). Adaugă 'b' pentru fișiere binare (imagini, PDF).

Instrucțiunea with închide fișierul automat la ieșirea din bloc, chiar dacă apare o eroare. Folosește-o mereu în locul unui f.close() scris de mână. with funcționează cu orice „context manager”, nu doar cu fișiere.

Dă întotdeauna encoding="utf-8" pentru fișierele text. Fără el, Python folosește codificarea sistemului, care pe Windows poate strica diacriticele.

Parametri

Parametru Descriere
fisier Calea către fișier (text sau pathlib.Path).
mode 'r', 'w', 'a', 'x', plus opțional 'b' (binar) sau '+' (citire și scriere).
encoding Codificarea textului. Recomandat: 'utf-8'.
newline Cum sunt tratate capetele de rând. La fișierele CSV se dă newline=''.

Ce returnează

Un obiect fișier. Dacă fișierul nu există la citire, apare FileNotFoundError.

Exemple

Exemplul 1: Scriere și citire

with open("note.txt", "w", encoding="utf-8") as f:
    f.write("Ana: 9\n")
    f.write("Mihai: 7\n")

with open("note.txt", encoding="utf-8") as f:
    continut = f.read()
print(continut)

Rezultat

Ana: 9
Mihai: 7

Exemplul 2: Citire rând cu rând și adăugare

with open("jurnal.txt", "w", encoding="utf-8") as f:
    f.write("Pornire aplicație\n")
with open("jurnal.txt", "a", encoding="utf-8") as f:
    f.write("Utilizator logat\n")

with open("jurnal.txt", encoding="utf-8") as f:
    for numar, rand in enumerate(f, start=1):
        print(numar, rand.rstrip())

Rezultat

1 Pornire aplicație
2 Utilizator logat

Exemplul 3: Fișier care lipsește

try:
    with open("nu_exista.txt", encoding="utf-8") as f:
        print(f.read())
except FileNotFoundError as eroare:
    print("Nu am găsit fișierul:", eroare.filename)

Rezultat

Nu am găsit fișierul: nu_exista.txt

Greșeli frecvente

  • Deschizi cu 'w' un fișier la care voiai să adaugi. Modul 'w' șterge tot conținutul; folosește 'a'.
  • Uiți encoding="utf-8" și diacriticele apar stricate pe alt sistem (de exemplu î în loc de î).
  • Citești rândurile și uiți că fiecare se termină cu \n. Folosește rand.rstrip() sau rand.strip().

Comenzi înrudite