MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Fișiere text

Scrierea într-un fișier text

Pentru a deschide un fișier text pentru scriere, este necesar să se aplice modul w (rescriere), a (adăugare) sau r+/w+ (citire și scriere). Apoi, pentru scriere, se utilizează metoda write(str), căreia i se transmite șirul ce urmează să fie scris. Este de menționat că se scrie un șir, astfel că, dacă trebuie să scrieți numere sau date de alte tipuri, acestea trebuie convertite în prealabil în șiruri.

Să scriem câteva informații în fișierul "hello.txt":

with open("hello.txt", "w") as file:
   file.write("hello world")

print("Fișierul a fost scris")

Dacă deschidem folderul în care se află scriptul Python curent, vom vedea acolo fișierul "hello.txt". Acest fișier poate fi deschis în orice editor de text și modificat, dacă se dorește.

Acum, să adăugăm încă un șir în acest fișier:

with open("hello.txt", "a") as file:
   file.write("\nhello work")

print("Fișierul a fost modificat")

Adăugarea unui șir apare ca adăugarea de text la ultimul caracter din fișier, astfel că, dacă este necesar să se facă o scriere pe un nou rând, se poate utiliza secvența de escape "\n". În final, fișierul "hello.txt" va avea următorul conținut:

hello world
hello work

Pentru a scrie o listă de șiruri, există metoda writelines(). Ca parametru, aceasta acceptă o listă de șiruri:

lines = ["Hello Word\n", "Hello Work\n", "Hello World\n"]
with open("hello2.txt", "a") as file:
   file.writelines(lines)
   
print("Lista de șiruri a fost scrisă în fișier")

Este important de reținut că, dacă dorim ca fiecare șir din listă să fie plasat pe o linie separată în fișier, șirul din listă trebuie să se termine cu simbolul "\n".

Un alt mod de a scrie în fișier este folosind metoda standard print(), care este utilizată pentru afișarea datelor pe consolă:

with open("hello.txt", "a") as myfile:
   print("\nhello FDC.com", file=myfile)

Pentru a afișa datele în fișier, metoda print primește ca al doilea parametru numele fișierului prin parametrul file. Primul parametru reprezintă șirul ce urmează să fie scris în fișier.

Citirea fișierului

Pentru a citi un fișier, acesta este deschis în modul r (Read), iar apoi conținutul său poate fi citit folosind diverse metode:

  • readline(): citește un șir din fișier
  • read(): citește tot conținutul fișierului într-un singur șir
  • readlines(): citește toate liniile din fișier într-o listă

De exemplu, să citim fișierul de mai sus linie cu linie:

with open("hello.txt", "r") as file:
   for line in file:
       print(line)

Deși nu aplicăm explicit metoda readline() pentru a citi fiecare linie, în timpul parcurgerii fișierului, această metodă este automat apelată pentru a obține fiecare linie nouă. Prin urmare, în buclă, nu este necesar să apelăm manual metoda readline(). Ieșirea pe consolă:

hello world

hello work

hello FDC.com

Cu toate acestea, deoarece funcția print adaugă implicit un caracter de final de linie "\n" la fiecare șir, iar liniile din fișierul scris sunt, de asemenea, separate de simbolul "\n", rezultă că fiecare linie se termină cu un dublu "\n". Pentru a exclude transferul excesiv pe altă linie, în funcția print se poate transmite valoarea end="".

with open("hello.txt", "r") as file:
   for line in file:
       print(line, end="")

Acum vom apela explicit metoda readline() pentru a citi linii individuale:

with open("hello.txt", "r") as file:
   str1 = file.readline()  # citim prima linie
   print(str1, end="")
   str2 = file.readline()  # citim a doua linie
   print(str2)

Ieșirea pe consolă:

hello world
hello work

Metoda readline() poate fi utilizată pentru citirea linie cu linie a fișierului într-o buclă while:

with open("hello.txt", "r") as file:
   line = file.readline()
   while line:
       print(line, end="")
       line = file.readline()

Dacă fișierul este mic, poate fi citit deodată folosind metoda read():

with open("hello.txt", "r") as file:
   content = file.read()
   print(content)

De asemenea, putem folosi metoda readlines() pentru a citi întregul fișier într-o listă de șiruri:

with open("hello.txt", "r") as file:
   contents = file.readlines()
   str1 = contents[0]
   str2 = contents[1]
   print(str1, end="")
   print(str2)

Când citim un fișier, putem întâmpina situația în care codificarea sa nu corespunde cu ASCII. În acest caz, putem specifica în mod explicit codificarea folosind parametrul encoding:

filename = "hello.txt"
with open(filename, encoding="utf8") as file:
   text = file.read()

Citirea și scrierea

Pentru a deschide un fișier atât pentru citire, cât și pentru scriere, se utilizează flagurile:

  • r+: dacă fișierul nu este găsit, se generează excepția FileNotFoundError
  • w+: dacă fișierul nu există, acesta este creat automat. Dacă fișierul există, acesta este rescris

De exemplu, să scriem și să citim date dintr-un fișier:

with open("hello.txt", "w+") as file:
   file.write("Hello world\nHello work\n")  # mai întâi scriem datele
   file.seek(0)  # ne mutăm la primul octet din fișier
   content = file.read()  # citim datele
   print(content)

Deplasarea în fișier

Pentru a vă deplasa în fișier după ce a fost deschis, se folosește metoda seek(). Aceasta primește indexul octetului la care trebuie mutat pointerul în fișier. De exemplu, în exemplul de mai sus, după scriere, pointerul în fișier se setează automat la sfârșitul fișierului. Iar citirea datelor începe de la poziția pe care este plasat pointerul. Și pentru a-l muta la început, se aplică apelul:

file.seek(0)

În mod similar, ne putem deplasa în fișier la poziția dorită. De exemplu, să citim datele începând de la al 6-lea simbol:

with open("hello.txt", "w+") as file:
   file.write("Hello world\n")  # mai întâi scriem datele
   file.seek(6)  # ne mutăm la al șaselea octet din fișier
   content = file.read()  # citim datele
   print(content)  # world

Exemplu de lucru cu fișiere

Acum, să scriem un script mic, în care se va înregistra un array de șiruri introdus de utilizator și se va citi înapoi din fișier pe consolă:

# numele fișierului
FILENAME = "messages.txt"

# scrierea unui șir în fișier
def write():
   message = input("Introduceți un șir: ")
   with open(FILENAME, "a") as file:
       file.write(message + "\n")

# citirea fișierului
def read():
   with open(FILENAME, "r") as file:
       for message in file:
           print(message, end="")
   print()  # salt de linie pentru a separa meniul de ieșirea pe consolă
           
while True:
   selection = int(input("1.Scriere în fișier\t\t2.Citire fișier\t\t3.Ieșire\nAlegeți acțiunea: "))
   match selection:
       case 1: write()
       case 2: read()
       case 3: break
       case _: print("Input incorect")
   
print("Programul s-a încheiat")

Exemplu de rulare a programului:

1.Scriere în fișier         2.Citire fișier          3.Ieșire
Alegeți acțiunea: 1
Introduceți un șir: Hello World

1.Scriere în fișier         2.Citire fișier          3.Ieșire
Alegeți acțiunea: 1
Introduceți un șir: Hello FDC.COM

1.Scriere în fișier         2.Citire fișier          3.Ieșire
Alegeți acțiunea: 2
Hello World
Hello FDC.COM

1.Scriere în fișier         2.Citire fișier          3.Ieșire
Alegeți acțiunea: 3
Programul s-a încheiat
← Lecția anterioară Lecția următoare →