Delo z datotekami v Pythonu

Delo z datotekami v Pythonu

Avtor: Anja Vencelj

Uvod v delo z datotekami

Osnovna značilnost tekstovnih datotek je razdeljenost na vrstice. Datoteke lahko tvorimo s Pythonom ali kar z Beležnico.

S pomočjo programa Python lahko posamezne tekstovne datoteke spreminjamo tako, da uporabljamo različne metode, ki so že definirane v tem programskem jeziku. Lahko prepisujemo posamezne vrstice v nove datoteke, spreminjamo vrstni red vrstic, jih brišemo, izpisujemo vrstice, podatke iz datoteke uporabljamo kot parametre v funkcijah,...

V Pythonu lahko ustvarjamo tudi imenike (mape), v katere dodajamo datoteke.

Metode za delo z datotekami in imeniki

Za delo z datotekamo uporabljamo modul os. V tem modulu obstaja v veliko uporabnih metod.

Nekaj metod:

1. metoda za ustvarjanje imenika:  mkdir 

2. metoda za preimenovanje datoteke ali imenika:  rename 

3. metoda za brisanje imenika:  rmdir 

Metodi  mkdir in rmdir  imata en parameter. Njun parameter je relativna ali absolutna pot, ki vodi do mesta na disku, kjer želimo ustvariti imenik ali kjer se imenik, ki bi ga radi izbrisali, nahaja.

Absolutna in relativna pot

Absolutna pot se začne se s črko logične enote za trajno shranjevanje podatkov (c:, d:, f:,...). Potem sledi zaporedje imenikov, v katere vstopamo pri potovanju do cilja po najkrajši poti. Imena imenikov so ločena s poševnico '\'. Če gre za pot do datoteke je zadnje ime v tem nizu ime datoteke, sicer pa ime imenika. Primer: 'c:\mapa\podmapa\NovaMapa'

Relativna pot opisuje pot relativno glede na pozicijo. Če se npr. pri zgornjem primeru nahajamo v imeniku c:\mapa, je relativna pot do imenika z imenom NovaMapa: 'podmapa\NovaMapa'

Primer:

S Pythonom lahko ustvarimo imenik 'novaMapa' na disku c. Zapišemo relativno pot do mesta, kjer želimo ustvariti imenik:

(mkdir1.png)

V raziskovalcu lahko vidimo na novo ustvarjeno mapo:

(mkdir2.png)

Objekt path

V modulu os obstaja tudi objekt path z nekaj koristnimi metodami:

1. metoda, ki preverja velikost datoteke :  os.path.getsize(pot) 

2. metoda, ki preverja, če imenik z nekim imenom že obstaja :  os.path.isdir(pot)  Metoda vrne True, če imenik obstaja, in False, če ne obstaja.

3. metoda, ki preverja, če datoteka z nekim imenom že obstaja :  os.path.isfile(pot)  Tudi ta metoda vrne True, če datoteka obstaja, in False, če ne obstaja.

Ustvarjanje datotek

Novo prazno datoteko ustvarimo z ukazom  open("mojaDatoteka.dat",'w')  , pri čemer 'w' pomeni, da lahko vanjo pišemo. Če je že prej obstajala datoteka s tem imenom, ji nova datoteka zbriše vsebino.

Primer:

Želimo ustvariti datoteko z imenom  mojaDatoteka.txt 

 open(mojaDatoteka.txt,'w') 

In že je datoteka ustvarjena v mapi. Ker nismo definirali relativne poti do mesta, kamor bi radi shranili datoteko, je le-ta ustvarjena kar v imeniku programa Python.

Pisanje v datoteke

V že obstoječe ali na novo ustvarjene datoteke lahko pišemo.

Primer:

 datotekaZaPisanje = open(mojaDatoteka.txt,'w') 

Spremenljivka  **datotekaZaPisanje**  sedaj označuje datoteko, ki smo jo odprli.

in nato z metodo write pišemo vanjo

 datotekaZaPisanje.write('To je moje besedilo.') 

Namesto metode  write  , lahko uporabljamo tudi ukaz print.

Ukaz print privzeto izpisuje na 'konzolo', zato mu moramo posebej 'naročiti', da izpisuje na datoteko (preko parametra 'file'). Metoda write pa izpisuje v datoteko brez dodatnih parametrov.

Pisanje na datoteko  mojaDatoteka  , bi v tem primeru izgledalo tako:

 datotekaZaPisanje = open(mojaDatoteka.txt,'w')

print('To je moje besedilo.', file = datotekaZaPisanje) 

Ko končamo delo na datoteki, jo zapremo z ukazom close(), sicer lahko izgubimo del besedila.

Dodajanje besedila v datoteko

V datoteko, ki že obstaja, lahko dodajamo besedilo z ukazom 'a' .

Primer:  datotekaZaPisanje = open('mojaDatoteka.txt','a') 

 datotekaZaPisanje.write('Dodam še malo besedila.')
 

Vse kar zapišemo naknadno, se zapiše na konec datoteke.

Datoteka mora obstajati že od prej, sicer se ustvari nova datoteka.

Branje iz datoteke

Datoteko odpremo za branje z ukazom 'r'.

Primer:

 datotekaZaBranje = open('mojaDatoteka.txt','r')
 

Če hočemo odpreti datoteko za branje, pa je dovolj tudi, če zapišemo samo:

 datotekaZaBranje = open('mojaDatoteka.txt')
 
Posamezne vrstice beremo tako, da zapišemo ukaz readline.

Primer:
datotekaZaBranje = open('mojaDatoteka.txt') 
- odpremo datoteko za branje

 prvaVrsta = datotekaZaBranje.readline()  - preberemo prvo vrsto

 print(prvaVrsta)-izpišemo prvo vrsto

drugaVrsta=datotekaZaBranje.readline() 
- preberemo drugo vrsto

 print(drugaVrsta)-izpišemo drugo vrsto 

Če smo na koncu datoteke, ukaz vrne prazen niz:  '' 

Če pa hočemo prebrati vse vrste naenkrat, pa na enak način zapišemo ukaz read().

Primer:

 datotekaZaBranje = open('mojaDatoteka.txt')

celotnoBesedilo = datotekaZaBranje.read()

print(celotnoBesedilo) 

Primer naloge 1

Naloga:

Ustvari datoteko mojaDatoteka.txt. Vanjo vpiši naslednje besedilo:  'Delo z datotekami je enostavno.' 

Datoteko zapri. Nato vanjo dodaj še besedilo.  'Mogoče pa tudi ne.'
 
Nato besedilo datoteke izpiši po vrsticah.

Primer naloge 2

Naloga:

Napiši funkcijo  kolikoKrat(ime, niz)  , ki prebere datoteko in ugotovi, koliko krat se niz pojavi v tej datoteki. Primer uporabe:

Naj bo v datoteki tretjaDat.txt naslednje besedilo:

 Kje so tiste stezice,

ki so včasih bile,

zdaj pa rastejo rožce

in zelene trave.
 
Potem:

 >>> kolikoKrat("tretjaDat.txt", "so")

0%
0%