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șterand.rstrip()saurand.strip().
Comenzi înrudite
Path.read_text(), write_text(), read_bytes(), write_bytes(): Citește sau scrie tot conținutul unui fișier dintr-un singur apel.json.dump(): Scrie o valoare Python, ca JSON, direct într-un fișier deschis.csv.reader(): Citește un fișier CSV rând cu rând, fiecare rând ca listă de texte.try / except / else / finally: Prinde și tratează erorile (excepțiile), ca programul să nu se oprească brusc.