MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Deschiderea și închiderea fișierelor

Python suportă o multitudine de tipuri diferite de fișiere, dar, în mod convențional, acestea pot fi împărțite în două categorii: textuale și binare. Fișierele textuale sunt, de exemplu, fișiere cu extensia cvs, txt, html, în general orice fișiere care păstrează informații în format text. Fișierele binare sunt imagini, fișiere audio și video etc. În funcție de tipul fișierului, lucrul cu acesta poate diferi ușor.

La lucrul cu fișiere, este necesar să respectați o anumită secvență de operații:

  • Deschiderea fișierului cu metoda open
  • Citirea fișierului cu metoda read sau scrierea în fișier prin metoda write
  • Închiderea fișierului cu metoda close

Deschiderea și închiderea fișierului

Pentru a începe lucrul cu un fișier, acesta trebuie deschis cu ajutorul funcției open, care are următoarea definiție formală:

open(file, mode)

Primul parametru al funcției reprezintă calea către fișier. Calea fișierului poate fi absolută, adică să înceapă cu litera discului, de exemplu, C://somedir/somefile.txt. Sau poate fi relativă, de exemplu, somedir/somefile.txt - în acest caz, căutarea fișierului se va face relativ la locația scriptului Python care a fost pornit.

Al doilea argument transmis - mode - stabilește modul de deschidere a fișierului în funcție de ceea ce intenționăm să facem cu el. Există 4 moduri generale:

  • r (Read) Fișierul este deschis pentru citire. Dacă fișierul nu este găsit, se generează excepția FileNotFoundError
  • w (Write) Fișierul este deschis pentru scriere. Dacă fișierul nu există, acesta este creat. Dacă un fișier similar există deja, acesta este creat din nou, și, în consecință, datele vechi din el sunt șterse
  • a (Append) Fișierul este deschis pentru adăugare. Dacă fișierul nu există, acesta este creat Dacă un fișier similar există deja, datele sunt adăugate la sfârșitul acestuia
  • b (Binary) Se folosește pentru lucrul cu fișiere binare. Se aplică împreună cu alte moduri - w sau r, de exemplu, rb (citirea fișierelor binare) și wb (scrierea fișierelor binare)
  • r+ Fișierul este deschis simultan pentru citire și scriere. Dacă fișierul nu este găsit, se generează excepția FileNotFoundError
  • w+ Fișierul este deschis simultan pentru citire și scriere. Dacă fișierul nu există, acesta este creat automat. Dacă fișierul există, acesta este rescris
  • a+ Fișierul este deschis simultan pentru citire și scriere. Dacă fișierul nu există, acesta este creat automat. Dacă fișierul există, datele sunt adăugate la sfârșitul fișierului

De exemplu, deschiderea unui fișier text pentru scriere:

myfile = open("hello.txt", "w")

Sau deschiderea unui fișier binar pentru citire:

myfile = open("image.png", "rb")

După finalizarea lucrului cu fișierul, acesta trebuie închis neapărat prin metoda close. Această metodă va elibera toate resursele utilizate asociate cu fișierul.

De exemplu, să deschidem pentru scriere fișierul text "hello.txt":

myfile = open("hello.txt", "w")
myfile.close()

La deschiderea unui fișier sau în timpul lucrului cu acesta, ne putem confrunta cu diverse excepții, de exemplu, fișierul nu este accesibil etc. În acest caz, programul va genera o eroare, iar execuția lui nu va ajunge la apelarea metodei close, și, prin urmare, fișierul nu va fi închis.

În acest caz, putem trata excepțiile:

try:
   myfile = open("hello.txt", "w")
   try:
       print("Lucrul cu fișierul")
   finally:
       myfile.close()
except Exception as ex:
   print(ex)

În acest exemplu, tot lucrul cu fișierul se desfășoară într-un bloc try imbricat. Și dacă apare vreo excepție, în orice caz, în blocul finally, fișierul va fi închis.

Totuși, există o construcție mai convenabilă - construcția with:

with open(file, mode) as myfile:
   instrucțiuni

Această construcție definește pentru fișierul deschis variabila myfile și execută un set de instrucțiuni. După execuția acestora, fișierul este închis automat. Chiar dacă apar excepții în timpul execuției instrucțiunilor din blocul with, fișierul va fi închis oricum.

Astfel, să rescriem exemplul anterior:

with open("hello.txt", "w") as myfile:
   print("Lucrul cu fișierul myfile")
← Lecția anterioară Lecția următoare →