Python - osnove dela z datotekami

Python - osnove dela z datotekami

Avtor: Sevludin Halilović

Težavnost: lahka, srednje težka

Predvideni čas: 10-20 min

Učni cilji: Učenec zna: s Python-om ustvariti datoteko, pisati vanjo, brati iz nje, dopisovati vanjo...

Python in datoteke

Nekoč programski jeziki niso predvidevali shranjevanja (zapisovanja) podatkov, ki bi bili dostopni za kasnejšo (ponovno) uporabo. Če to želimo, moramo uporabiti (tekstovne) datoteke. Python ima vgrajeno funkcijo (oz. metodo) za dostop do datoteke - open() . Ta vrne objekt "file", oz. po naše "datoteka".

Datoteke lahko uporabimo kot začasno oziroma manjšo podatkovno bazo.

razred os

Razred os je v Pythonu namenjen delu z datotekami. Vse metode za delo z datotekami (open(), close(), write, read, append, path...) so v tem razredu.

Na začetku bomo delali z datotekami, ki se nahajajo v isti mapi kot sama programska datoteka, zato nam ne bo potrebno pisati poti do nje.

Kasneje se bomo ukvarjali tudi z datotekami, ki se nahjajo drugje in bo potrebno navesti pot do nje.

Path

Če se datoteka nahaja drugje, moramo pot do nje napisati pred njenim imenom. Imamo dve možnosti navajanja poti: ABSOLUTNO in RELATIVNO.

Pri absolutni poti naštejemo vse mape in podmape od diska (C:, D:, ...) do tekstovne datoteke (*.txt), pri čemer se vsak prehod iz mape v podmapo označi s poševnico nazaj (\).

Pri relativni poti se pa le navede pot od mape, v kateri je programska datoteka (*.py) do mape v kateri je tekstovna datoteka.

Ker je relativno določanje poti praviloma težje kot absolutno, ga ne bomo uporabljali.

open()

Funkcija open() odpre obstoječo fizično datoteko in ustvari nakakšno "povezavo" z njo. beri = open(datoteka)

Primer:

Na disku (v isti mapi kot je naš program) imamo shranjeno datoteko MojaPrvaDatoteka.txt. Kako bi prebrali njeno vsebino?

Takole:

preberi = open('MojaPrvaDatoteka.txt')
print(preberi.read())

close()

Celotna vsebina, ki jo želimo zapisati na datoteko, se najprej "shranjuje" v medpomnilniku. Na datoteko se izpiše ko podatkovni tok (dostop, "povezavo") zapremo.

To dosežemo z ukazom close() .

Čeprav python poskrbi za zapis na datoteko, tudi če "pozabimo" na close() , je lepše in bolj "higienično", če ga dodamo. To je še toliko bolj pomembno pri velikih programih, kjer bi lahko prihajalo do težav.

Zato se kar navadimo, da vsak open() končamo s close() .

write

Enkrat, ko vzpostavimo povezavo z datoteko, je potrebno povedati, kaj bomo z njo počeli.

Vanjo lahko pišemo, dopisujemo ali iz nje beremo.

Vsaka izmed naštetih možnosti ima svoje "določilo", s katerim v programu povemo, kaj bi radi počeli.

Za pisanje v datoteko se uporabi 'w' , ki je le krajše za "write" oz. pisanje.

Primer programa:

mojaDat = open ('mojaPrvaDat.txt', 'w')
mojaDat.write('Besedilo v datoteki')
mojaDat.close()

Ko ta program shranimo in zaženemo, se v isti mapi, kot je programska datoteka, ustvari še besedilna datoteka

mojaPrvaDat.txt

Če to datoteko na disku poiščemo in odpremo je v njej zapisano besedilo

Besedilo v datoteki .

Primer pisanja v več vrsticah:

mojaDat = open ('mojaPrvaDat.txt', 'w')
mojaDat.write('Prva vrstica\n')
mojaDat.write('Druga vrstica\n')
mojaDat.write('Tretja vrstica\n')
mojaDat.close()

V tem primeru je v datoteki zapisano:

Prva vrstica
Druga vrstica
Tretja vrstica

Če v programu vpišemo ime že obstoječe datoteke, se bo prvotna vsebina te datoteke prepisala z novo. Na ta način lahko izgubimo pomembne podatke.

Zato je koristno uporabiti "orodje" isfile .

os.path.isfile

Za uporabo modula isfile je nujno potrebno najprej uvoziti razred os :

import os

Z njo preverimo obstoj datoteke s točno določenim imenom. Vrne nam True ali False . Tako lahko na primer preprečimo izgubo podatkov, če bi po nesreči datoteko poimenovali enako, kot že obstoječo.

Primer programa:

import os
imeDat = input ('Vnesi ime datoteke: ')
if os.path.isfile(imeDat):
    print ('Datoteka ' , imeDat , ' že obstaja')
else:
    ustvariNovo = open (imeDat, 'w')
    ustvariNovo.write('Preverili smo obstoj datoteke. Ker je še ni bilo, smo jo ustvarili (s tem besedilom)')
    print('Datoteka ' , imeDat , ' še ni obstajala. Sedaj obstaja. Odpri jo in preberi vsebino.')
    ustvariNovo.close()

read

Kot smo povedali že na začetku, je tekstovna datoteka lahko tudi neke vrste podatkovna baza, v kateri so shranjeni podatki, ki jih potrebujemo.

Podatke iz datoteke beremo z 'r' , kar je skrajšano za read() .

Primer programa:

preberi = open('MojaPrvaDatoteka.txt','r')
print(preberi.read())

S tem programom preberemo vsebino datoteke in jo s print() izpišemo na zaslon.

V spodnji tabeli je prikazano kaj vse nam omogoča red() :

open(’imeDatoteke’, ’r’)odpre datoteko za branje
datSprem = datoteka.read()celotno datoteko prebere v niz
datSprem = datoteka.read(n)prebere prvih n znakov iz datoteke
datSprem = datoteka.readline(n)prebere naslednjo vrstico v datoteki
datSprem = datoteka.readlines(n)celotno datoteko prebere v seznam nizov

append

Včasih bi pa radi našo podatkovno bazo v datoteki dopolnili. To naredimo z 'a' , kar je skrajšano od append , kar bi pomenilo dodajanje.

Vsebina, ki jo dodajamo, se v datoteko vedno pripiše na koncu.

Primer s funkcijo:

def dodajTekst(imeDat):
    import os
    if os.path.isfile(imeDat):
        dodaj = open(imeDat, 'a')
        return dodaj
    else:
        dodaj = open(imeDat, 'w')
        return dodaj

# Klicanje funkcije:

mojaDat = dodajTekst('desetVrstic.txt')
mojaDat.write ('vrstica - dodana naknadno \n')
mojaDat.close()
0%
0%