Open() funkcija

Pre nego što se upisuje ili čita iz fajla, fajl mora biti učitan tj. otvoren sa open() funkcijom. Open() funkcija pravi objekat tipa file u koji se učitava konkretan fajl koji navedemo kao argument pri pozivu metoda. Sintaksa ove funkcije je:

  
file object = open ( file_name, acess_mode, buffering)


            

open je ugrađena (built-in) funkcija, kojoj se može proslediti nekoliko argumenata, od kojih je samo “file_name” obavezan (u našem primeru “output.txt”).

Opišimo argumente ove funkcije:
file_name – string koji sadrži naziv ili putanju do fajla. Ako se fajl nalazi u root folderu gde je i radno okruženje Pajtona instalirano, može se navesti samo ime fajla, u suprotnom mora se navesti cela putanja npr: “ C:\Projekti\output.txt”.
acess_mode – odlučuje u kojem će režimu fajl biti otvoren:
"r" – samo za čitanje fajla – ovo je podrazumevani režim, ako drugi parametar nije naveden, uzima se ovaj.
"r+" - otvara fajl i za čitanje i za pisanje.
"w" - otvara fajl samo za pisanje. Ako fajl postoji, snimiće novi fajl preko njega, ako ne postoji, napraviće novi.
"w+" - otvara fajl i za čitanje i za pisanje. Ako fajl prethodno ne postoji stvara ga, a ako postoji, piše preko njega.
"a" - otvara fajl za dodavanje koje počinje na kraju fajla, ako fajl ne postoji, stvara novi.
"a+" - otvara fajl i za dodavanje i za čitanje. Počinje na kraju fajla, ako fajl ne postoji, stvara novi.
Primetimo da režimi "w" i "w+" , u slučaju da fajl već postoji, pišu preko postojećeg fajla.
Takođe, ako navedemo ime fajla koji ne postoji, a radimo u "w" režimu, Pajton će stvoriti novi fajl sa tim imenom i nastavićemo da radimo, ali ako damo režim "r" a fajl ne postoji, Pajton će nam vratiti grešku, program će stati sa radom (IOError).

Buffering – pomoćna memorija, gde 0 označava da se ne koristi poćna memorija, a 1 da se koristi. Moguće je zadati i veličinu pomoćne memorije u bajtovima (parametar će biti broj veći od 1, dok negativan broj označava da je velićina bafera podrazumevana).

Upis u fajl

Vratimo se na naš primer:

  
moja_lista = [i**2 for I in range(1,11)]
  
for item in moja_lista:
      f.write(str(item)+"\n")
f.close()
            

Sadržaj se u fajl upisuje funkcijom write, tj.
f.write ("sadržaj za upis") - kao argument ova funkcija uzima string.
Funkcijom close() se zatvara file objekat i nakon toga svaki poziv na čitanje ili pisanje vratio bi grešku. Njime se izvršava tzv. flush (izlivanje, prebacivanje) podataka u fajl, pošto dok radimo sa fajlom podaci o tome se drže u memoriji ( još nisu fizički upisani u fajl ) sve dok se ne izvrši flush koji predstavlja fizički upis.

Ovde je potrebno uraditi nekoliko stvari :
1.Proći kroz listu i uzeti svaku vrednost posebno
2.Za svaku vrednost pozvati funkciju write i upisati je u fajl "output.txt"
3.Za svaku vrednost moramo pozvati str - "str(item)" kako bismo bili sigurni da funkciji prosleđujemo string
4.Za svaki element na kraju dodajemo "\n" da bi se svaka vrednost upisala u posebnom redu u fajlu
5.Na kraju, mora se pozvati close(), da bi se fajl zatvorio. Ako se to ne uradi Pajton neće ispravno upisati vrednosti.

Bitno je istaći i da je moja_lista objekat tipa list koja sadrži kvadrate brojeva od 1 do 10. Ovo je pojednostavljen način pravljenja liste, koji nije postojao inicijalno u Pajtonu, nego je dodat u kasnijim verzijama. Proces se naziva “List comprehension” (skupovna lista) - omogućava pravljenje liste tako što se nad svakim članom neke druge liste ( u našem slučaju liste brojeva od 1 do 10 ) nad svakim elementom izvrši neka operacija ( u našem slučaju kvadrira) i te nove vrednosti postanu članovi nove liste. Više o ovim listama možete naci u delu kursa “Napredne tehnike u Pajtonu“.

Čitanje fajlova

Čitanje se jednostavno obavlja funkcijom read().
>>>f.read()
Na našem primeru bi to izgledalo:

  
 f = open ( "output.txt" , "r")
 print (f.read())
  f.close()
            

IZLAZ:
1
4
16...
Na ovaj način se ceo fajl čita odjednom.

Čitanje fajla red po red

Pajton nam pruža i mogućnost da čitamo fajl red po red, s tim što promenljiva f koja se koristi za čitanje datoteke, interno pamti koji smo poslednji red pročitali.
>>>print (f.readline())
1
>>>print (f.readline())
4
>>>print (f.readline())
9