Moj izdelek je aplikacija v jeziku Python, ki uporabniku omogoča upravljanje, kopiranje in samodejno razvrščanje datotek.
# =================================================================
# Mini raziskovalec datotek
# ================================================================
import os # Za delo z datotekami in mapami
import shutil # Za kopiranje, premikanje in brisanje map
import time # Da program ne teče prehitro
# -----------------------------------------------------------------
def prikazi_uvod():
print("\n**************************************************")
print(" MINI RAZISKOVALEC ")
print(" Vnesite pot in začnite urejati. ")
print("**************************************************\n")
# -----------------------------------------------------------------
# IZPIS DATOTEK IN MAP
# -----------------------------------------------------------------
def izpisi_datoteke(trenutna_pot):
print("\n--------------------------------------------------")
print("TRENUTNA LOKACIJA:", trenutna_pot)
print("--------------------------------------------------")
try: #poskuša prebrati vsebino v mapi
vsebina = os.listdir(trenutna_pot) #os.listdir vrne seznam vseh datotek in map v trenutni poti
#os je vgrajena knjižnica za delo z datotekami, listdir pa ukaz znotraj knjižnice, ki pogleda v mapo in vrne seznam datotek in map
except: #če ne more prebrati vsebine vrne to:
print("NAPAKA: Pot ni dostopna ali ne obstaja!")
return [] #vrne prazen seznam, če bi vrnila None potem bi dobil TypeError
if not vsebina: #če je mapa prazna lahko takoj zaključimo in ne potrebujemo zanke for
print("Mapa je prazna.")
return []
# gre čez seznam datotek in jih oštevilči ter izpiše
i = 0
for ime in vsebina: #z zanko se sprehodimo čez vsebino torej datoteke in ime je spremenljivka ki dobi ime naslednje datoteke iz seznama vsebina
polna_pot = os.path.join(trenutna_pot, ime) #to da pot mape in ime datoteke skupaj
if os.path.isdir(polna_pot): #os.path.isdir preveri ali je polna_pot mapa
tip = "[MAPA]"
else: #če ni mapa je datoteka
tip = "[DAT]"
print(i, ":", tip, ime)
i = i + 1
print("--------------------------------------------------")
return vsebina
# -----------------------------------------------------------------
# KOPIRANJE IN PREMIKANJE
# -----------------------------------------------------------------
def upravljaj_datoteko(pot, seznam, akcija):
print() # Prazen prostor za preglednost
print("---", akcija.upper(), "---") #spremeni male tiskane v velike tiskane
vnos_indeks = input("Vpiši številko datoteke (ali 'N' za NAZAJ): ")
if vnos_indeks.lower() == 'n': #če pritisneš N se funkcija zaključi in sevrne nazaj na glavni meni
return
if vnos_indeks.isdigit(): #preveeri ali je vnos res številka
indeks = int(vnos_indeks) #spremeni vpisano število v integer da lahko uporabimo kot indeks v seznamu
if indeks >= len(seznam): #če je vnesena številka večja kot zadnji indeks na seznamu vrne napako
print("Napaka: Številka ni na seznamu!")
return
else: #če ni številka vrne napako
print("Napaka: Vpisati moraš številko!")
return
izbrano_ime = seznam[indeks] #iz seznama vzame ime datoteke ali mape na mestu vpisane številke
print("Izbrali ste datoteko:", izbrano_ime)
cilj = input("Vnesi ciljno pot (ali 'N' za nazaj): ") #vnesemo cilno pot kamor želimo premakniti/kopirati
if cilj.lower() == 'n': #preveri če je uporabnik vpisal n, dela pa tudi N (zato lower)
return
stara_pot = os.path.join(pot, izbrano_ime) #združi naslov trenutne mape in ime izbrane datoteke v eno celotno pot
nova_pot = os.path.join(cilj, izbrano_ime) #združi naslov ciljne mape in ime datoteke, da se ve, kam jo je treba kopirati
if os.path.exists(cilj): #preveri če mapa v katero želimo kopirati/premakniti sploh obstaja, če ne vrne napako
if akcija == "kopiraj":
shutil.copy(stara_pot, nova_pot) #shutil.copy kopira datoteko iz stare_pot v nova_pot
else:
shutil.move(stara_pot, nova_pot) #shutil.move premakne datoteko iz stare_pot v nova_pot
print("Uspešno izvedeno!")
else:
print("Napaka: Ciljna pot ne obstaja!")
# -----------------------------------------------------------------
#SAMODEJNO RAZVRŠČANJE
# -----------------------------------------------------------------
def samodejno_razvrsti(pot):
print("\nRazvrščam datoteke v podmape...")
vsebina = os.listdir(pot) #dobimo seznam datotek in map v trenutni mapi
for ime in vsebina:
polna = os.path.join(pot, ime) #združi v polno pot
if os.path.isdir(polna): continue #če je mapa jo preskoči, saj obdeluje le datoteke
# pridobimo končnico (npr .jpg)
koncnica = os.path.splitext(ime)[1].lower()
mapa = "" #ustvari prazno spremenljivko, v katero se potem shrani ime podmape glede na vrsto datoteke
if koncnica in [".jpg", ".png", ".jpeg"]: mapa = "SLIKE"
elif koncnica in [".pdf", ".docx", ".txt", ".doc"]: mapa = "DOKUMENTI"
elif koncnica in [".mp4", ".mov", ".avi"]: mapa = "VIDEO"
if mapa != "": #če je mapa že določena, in če datoteka spada v eno od kategorij, potem se premakne v ustrezno mapo
pot_mape = os.path.join(pot, mapa) #sestavi pot do podmape npr. trenutna_pot/SLIKE
if not os.path.exists(pot_mape): #preveri ali ta podmapa že obstaja, če ne jo ustvari
os.mkdir(pot_mape)
shutil.move(polna, os.path.join(pot_mape, ime)) #premakne datoteko iz trenutne mape v pravo podmapo
print("Razvrščanje končano!")
# -----------------------------------------------------------------
# PROGRAM zagon in meni
# -----------------------------------------------------------------
def glavni_program():
prikazi_uvod() #prikliče funkcijo ki prikaže uvodni napis
moja_pot = "" #pripravi prazno spremelnljivko v kateri bo lokacija mape
while moja_pot == "": #zanka se ponavlja dokler uporabnik ne vnese veljavne poti
vnos_poti = input("Vpiši pot do mape, ki jo želiš upravljati: ")
# Preverimo, če vnesena pot sploh obstaja na računalniku
if os.path.exists(vnos_poti):
moja_pot = vnos_poti
print("Pot uspešno sprejeta!")
else:
print("NAPAKA: Ta pot ne obstaja. Poskusi ponovno.") #in še enkrat vpišemo pot
# Glavna zanka programa
while True: #zanka, da se program po vsakem ukazu vrne na glavni meni
seznam_datotek = izpisi_datoteke(moja_pot) #pokliče fun. za pregled mape in shrani imena datotek v seznam
#glavni meni
print("\nGLAVNI MENI:")
print("1 - Kopiraj")
print("2 - Premakni")
print("3 - Samodejno razvrsti mapo")
print("4 - Spremeni trenutno mapo")
print("5 - IZHOD")
izbira = input("\nIzberi možnost: ") #shrani vneseno številko v izbira
if izbira == "1": #če je uporabnik izbral možnost 1, pokliče funkcijo za kopiranje datoteke
upravljaj_datoteko(moja_pot, seznam_datotek, "kopiraj")
elif izbira == "2":
upravljaj_datoteko(moja_pot, seznam_datotek, "premakni") #funkcija za premikanje
elif izbira == "3":
samodejno_razvrsti(moja_pot) #funkcija za razvrščanje datotek v podmape
elif izbira == "4":
nova = input("Vnesi novo pot (ali 'n' za NAZAJ): ") #če želiš vnesti novo pot
if nova.lower() != 'n' and os.path.exists(nova): #preveri, da uporabnik ni želel nazaj in če nova pot obstaja
moja_pot = nova
elif izbira == "5":
print("Zapiram program. Nasvidenje!") #izhod iz programa
break
else:
print("Neveljavna izbira!") #katera druga številka kot 1-5 vrne napako
# Program malce počaka da uporabnik lažje prebere kar napiše program, preden se vrne na glavni meni
time.sleep(1)
# Zagon programa
glavni_program()