Python


O datotekah

Vsi dosedanji programi niso predvidevali pomnenja podatkov, da bodo dostopni za kasnejšo uporabo. Če to želimo, moramo uporabiti datoteke.  Python ima vgrajeno funkcijo za dostop do datoteke, pravimo ji open. Ta funkcija vrne podatkovni tip "file". Ti podatkovni tipi imajo metode, ki omogočajo rokovanje z vsebino datoteke ( podobno, kot imajo seznami metode, kot sta append in sort za rokovanje z vsebino seznamov). Uporabljamo jih tako (rdeče so označene metode za delo z datotekami):

def branjeDatoteke():
print "Podaj ime datoteke, ki jo zeliš brati: ",
imeDatoteke = raw_input()
datoteka = open(imeDatoteke,'r')
vsebina = datoteka.read()
print "-----------------------------------------------------------"
print vsebina # crtkani vrstici nakazujeta
# zacetek in konec izpisa vsebine datoteke
print "-----------------------------------------------------------"

def pisanjeDatoteke():
print "Vpisi besedilo, ki ga zelis pomniti v datoteki:"
besedilo = raw_input() # tako beremo le eno vrstico besedila
print "Podaj ime datoteke, v katero zelis vpisati besedilo: ",
imeDatoteke = raw_input()
datoteka = open(imeDatoteke,'w')
datoteka.write(besedilo)
print "Tako, zapisal sem v datoteko"

print "Ta program dela z datotekami."
opravljeno = 0
while not opravljeno:
print "Izberi moznost:"
print " 1) Branje datoteke"
print " 2) Pisanje datoteke"
print " 3) Konec"
izbira = raw_input() # uporabljamo raw_input
if izbira =='1': # ker je bolj fleksibilen
branjeDatoteke()
elif izbira=='2':
pisanjeDatoteke()
elif izbira=='3':
opravljeno=1
else:
print "Slaba izbira.Ponovi!"

Program uvaja v Python nov tip podatkov, ki mu pravimo file (in je seveda dokumentiran v Library Reference). Zaenkrat nas zanima le branje in pisanje datotek. Datoteke imajo metodo read(), ki vrne vsebino datoteke v obliki niza. Če smo tako odprli datoteko kot spremenljivko z imenom  "obvestilo", bi lahko uporabili stavek

    tekst = obvestilo.read()

nato pa bi spremenljivka "tekst" vsebovala niz, ki predstavlja vsebino datoteke. Druga pomembna metoda je write(), ki sprejme niz kot edini argument funkcijskega klica in ga zapiše v datoteko. tako bi lahko uporabili stavek

    obvestilo.write("tu vstavi kaksno besedilo")

kar bi zapisalo "tu vstavi kaksno besedilo" v datoteko, ki jo predstavlja spremenljivka "obvestilo".  In kako dobimo spremenljivko, ki predstavlja datoteko? Za to uporabimo vgrajeno (built-in) funkcijo  open() (ki je tudi dokumentirana v Library Reference ). Tu opazimo, da je funkcija opisana kot

    open (filename[, mode[, bufsize]])

To pomeni, da funkcija  open( ) zahteva en argument, s katerim navedemo ime datoteke, ki jo želimo odpreti. Oglati oklepaji  "[]"' okrog naslednjih argumentov nakazujejo, da ti argumenti niso obvezni. Če imamo drugi argument,  pomeni ta način ("mode"), morebitni tretji argument pa kot velikost medpomnilnika ("bufsize").  Tako lahko funkcijo uporabljamo na različne načine:

    open("moj.dokument")           # odpre datoteko "moj.dokument" za branje

open("moj.dokument","w") # odpre isto datoteko za branje in pisanje

open("moj.dokument","w",1000) # odpre isto datoteko za branje in pisanje
# z velikostjo medpomnilnika 1000 bytov

Klic open() vrne  "file". Če torej želimo uporabiti datoteko ( file), jo moramo shraniti v spremenljivko. To pa naredimo z dobrim starim prireditvenim stavkom

    mojaDatoteka = open("moj.dokument")  # sedaj lahko uporabljamo "mojaDatoteka" za branje
# datoteke z imenom "moj.dokument"

Pa vse skupaj sestavimo v program, ki kopira datoteko:

    oldfile = open("moj.dokument","r")        # brali bomo originalno datoteko
newfile = open("moj.dokument.kopija","w") # in jo prepisovali v novo
data = oldfile.read()
newfile.write(data) # nova datoteka bo imela enako vsebino kot stara


Domača naloga:

Spremeni zgornji program tako, da uporabnik vpiše ime originalne datoteke in njene kopije. Program lahko preskusiš s kopiranjem  svojih datotek v Pythonu. 

V nadaljevanju si s pomočjo priročnika (library Reference) poglej metodi  readlines in writelines.. Ti metodi predstavljata posamezne vrstice datoteke kot ločene nize v seznamu.

Uporabi ti metodi tako, da sestaviš program, ki shrani seznam imen, ta seznam imen prebere nazaj in končno imena razvrsti (sortira).
Namig: Rešitev najdeš na naslednji strani.