Iskanje po datotekah

Iskanje po datotekah

Avtor: matic Pogladič

Iskanje po datotekah

Besedilo

Sestavi metodo, ki rekurzivno preišče vse datoteke iz mape (ime mape podana kot parameter) ter upošteva pravila:

  • Preišče samo datoteke z določeno končnico (seznam končnic je podan kot parameter)
  • Išče samo določene besede (seznam besed je podan kot parameter)
  • Izpiše datoteke, ki bodisi vsebujejo vse besede iz seznama (iz prejšnje točke) bodisi le eno besedo iz seznama. Po kateri metodi naj išče podamo kot parameter, torej kot spremenljivko, ki vsebuje niza "IN" ali "ALI".

Reševanje

(Zajeta slika1.JPG)

Uvozimo knjižnico z ukazom import os, ki nam bo pomagala za kasnejše delo z datotekami. Definiramo funkcijo z štirimi parametri. Prvi imeMape je pot mape, v kateri želimo pregledati vse elemente in izpisati tiste datoteke, ki imajo končnice, ki jih vnesemo v drugem parametru, seznamu 'koncnice' in besede, navedene v tretjem parametru, seznamu 'seznamBesed'. V zadnjem parametru funkcija sprejema 'IN' ali 'ALI', ki funkciji pove ali naj izpiše datoteke, ki vsebuje vse besede v seznamu seznamBesed ali pa vsaj eno besedo. Funkcija je občutljiva na velike začetnice in prazne sezname.

(Zajeta slika2.JPG)

Ustvrimo tri sezname. V prvem seznamu sez z ukazom os.listdir() zapišemo imena vseh elementov v mapi. sezKonc in sezKonc1 sta prazna seznama. Seznam sezKonc je rezerviran za vse datoteke z pravo končnico medtem, ko je sezKonc1 rezerviran za vse iskane končne datoteke. Z zanko, ki gre po seznamu sez preverimo ali je element datoteka in če je, gremo z zanko čez seznam koncnice in preverimo, če se zadnjih dolzino-j-tih črk ujema, kjer je j končnica. Če se ujema smo dobili element za sezKonc, kamor ga tudi dodamo.

(Zajeta slika0.JPG)

Ustvarimo novo funkcijo multiSplit(a), ki sprejme en parameter-niz in ga loči z večimi separatorji. Funkcijo in razlago lahko pridobite na spletni strani. Funkcijo bomo uporabili za razdeljevanje niza na posamezne besede, ločene z ločili ali presledkom.

(Zajeta slika3.JPG)

Če vnesemo v funkcijo 'ALI', kar pomeni, da želimo izpisati datoteke, ki vsebujejo vsaj eno besedo iz seznama seznamBesed, gremo z for zakno čez vse elemente seznamBesed in z novo for zanko čez seznam sezKonc, kjer razdelimo vse nize imen datotek na posamezne besede zapisane v saznam a. Če je torej katerikoli element iz seznamBesed v seznamu a in če tega elementa še ni v sezKonc1, ga tja dodamo kot končno rešitev.

(Zajeta slika4.JPG)

Če je inAli 'IN', gremo z for zanko čez sezKonc in nastavimo števec dolzina = 0. Ta števec je namenjen štetju ujemajočih se besed med seznamBesed in datoteko. V for zanki, ki gre čez vse elemente seznamBesed, razdelimo vsak niz imen datotek na posamezne besede, zapisane v seznam a in za vsak element seznamBesed-a preverimo če ga a vsebuje in če ga, povečamo števec za 1. Na koncu primerjamo velikost števca z dolžino seznamBesed in če sta enaka pomeni, da datoteka res vsebuje vse besede, zato jo ob primeru, da še ni v sezKonc1 tja dodamo.

(Zajeta slika5.JPG)

Za konec preverimo, če sezKonc1 ni prazen in če ni, izpišemo ustrezno mapo in seznam rešitev. Nato za vse elemente sez preverimo če so mape in če so, izvedemo rekurzijo tako, da pokličemo funkcijo z novim parametrom za novo mapo.

Ustvarimo mapo in še kakšno podmapo. Znotraj map ustvarimo čim več različnih datotek, ki bi lahko povzročile, da se program nebi pravilno izvajal (več končnic, ločila, mape s končnicami...). V testnem primeru preverimo če deluje 'IN' in 'ALI'.

Rešitev

(Zajeta slika6.JPG) (Zajeta slika0.JPG)
0%
0%