Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Organizador de carpetas
#1
Buen dia.

Vengo a compartir un pequeno programa para organizar carpetas, a diferencia del ultimo organizador, este posee interface, y permite agregar y eliminar extenciones y carpetas, ademas de elegir la carpeta donde se crearan y modificaran los archivos.

Código:
"""
Created on Sat Abr 24 22:01:13 2021

@autor: SlayerBur
"""

import os # Libreria de rutas
import os.path
from posixpath import split
#from posixpath import realpath
import shutil # Archivos
from tkinter import *
from tkinter import filedialog

import re
import pprint

#Obtengo la ruta en la que estoy ahora
ruta = os.getcwd()

# Variables
relxExt = 0.1 #Posicion X extenciones
separacion = 0.095 # Separacino en X (Botones)
relxCarpetas = 0.5 # Posicion X Carpetas

root = Tk()
root.title("Organizador")
root.geometry('400x380')
root.resizable(0,0)

configuracionInicial = {"Imagen":[".png",".NEF",".jpg", ".JPG"], "Texto":[".doc",".pdf",".cfg"], "Videos":[".mp4",".avi",".flv"]}
datos = {}
seleccionado = ""
#--------------------------

# Organizador
def crearCarpetas(): #Verifico existencia y creacion de carpeta en caso de no existir
   
    for carpeta in datos.keys():
        ubicacion = ruta + "/" + carpeta.replace(":", "")
        if (os.path.exists(ubicacion) == False):
            os.makedirs(ubicacion)

def cargarTxt():
    global datos
    if (os.path.exists("extCarp.txt") == False):
        file = open("./extCarp.txt", "w")
        datos = configuracionInicial
        file.close()

def moverArchivos():
    global ruta

    Archivos = os.listdir(ruta) #Obtengo los archivos existentes
   
    archivosExistentes = []
    for archivo in Archivos:
        archivosExistentes.append(archivo) 

    for archivo in archivosExistentes:
        nombre, extencion = os.path.splitext(archivo)
        archivo = ruta + "/" +archivo
        for llave, dato in datos.items():
            ubicacion = ruta + "/" + llave
            for i in dato:
                if (extencion == ".py"):
                    pass
                elif (i == extencion):
                    shutil.move(archivo, ubicacion)

    #print(archivosExistentes)
#--------------------------

def carpetaSelect():
    carpetaSelec = [listaCarpetas.get(listaCarpetas.curselection())]
    carpetaSelec = str(carpetaSelec).replace("['", "").replace("']","")
    return carpetaSelec

def eliminarExtencion():
    global seleccionado
    seleccion = listaExtenciones.curselection()
    print(seleccion)
    datos[seleccionado].remove(listaExtenciones.get(seleccion))
    listaExtenciones.delete(seleccion)

def anadirExtencion():
    listaExtenciones.insert(END, "."+entryExtencion.get())
    datos[carpetaSelect()].append("."+str(entryExtencion.get()))
    entryExtencion.delete(-1,END)
   
def actualizarExtenciones(event):
    global seleccionado
    seleccionado = carpetaSelect()
    listaExtenciones.delete(0,999)

    for extencion in datos[listaCarpetas.get(listaCarpetas.curselection())]:
        listaExtenciones.insert(0, extencion)
#-------------------------

def eliminarCarpeta():
    seleccion = listaCarpetas.curselection()
    textoSeleccionado = listaCarpetas.get(seleccion)

    listaCarpetas.delete(seleccion)
    del datos[textoSeleccionado]

def anadirCarpeta():
    listaCarpetas.insert(END, entryCarpeta.get())
    datos[entryCarpeta.get()] = []
    entryCarpeta.delete(-1,END)

def obtenerUbicacion():
    global ruta
    ruta = filedialog.askdirectory(parent=root, initialdir=os.getcwd(), title="Selecciones una carpeta:")

def saveTxt():
    file = open("./extCarp.txt", "w")
    for key, value in datos.items():
        Text = str(key) + ": " + str(value)
        Text = Text.replace("::", ":")
        file.write(Text)
    file.close()

def loadTxt():
    global datos
   
    with open("./extCarp.txt", "r") as fd:
        for line in fd:
            line = line.strip()
            if not (line):
                continue
   
            tokens = re.split("(\w+: )+", line)
            i = 0
            while (i < len(tokens)-1):
                name = tokens[i].strip().replace(":","")
                if not name:
                    i += 1
                    continue
   
                extensions = tokens[i+1].strip().replace("'", "")
   
                datos[name] = re.sub("(\[|\])", "", extensions)
                datos[name] = [x.strip() for x in datos[name].split(",")]
   
                i += 2
    #pprint.pprint(datos)
   
def Fallos0():
    #global o
    #print(datos)
    #print(o)
    print(datos)

Label(root,text="Organizador",font=('Open Sans', 18)).place(relx=0.35)#, relwidth=0.2, relheight=0.1)

Label(root, text="Carpetas",font=("Open Sans", 12)).place(relx=relxCarpetas, rely=0.2)#, relwidth=0.1, relheight=0.2)
listaCarpetas = Listbox(root)
listaCarpetas.place(relx=relxCarpetas, rely=0.28,width=160)#, relheight=0.5, relwidth=0.24)

cargarTxt()
loadTxt()
for carpetas in datos.keys():
    listaCarpetas.insert(0, carpetas)

entryCarpeta = Entry(root)
entryCarpeta.place(relx=relxCarpetas, rely=0.715,width=160)#, width=290)#, relheight=0.08, relwidth=0.24)
listaCarpetas.bind("<<ListboxSelect>>", actualizarExtenciones)

Button(root,text="Eliminar",command=eliminarCarpeta).place(relx=relxCarpetas+0.01, rely=0.77)#, relheight=0.08, relwidth=0.08)
Button(root,text="Añadir",command=anadirCarpeta).place(relx=relxCarpetas+separacion*2+0.01, rely=0.77)#, relheight=0.08, relwidth=0.08)

#-------------------------------------------------

Label(root, text="Extenciones",font=("Open Sans", 12)).place(relx=relxExt, rely=0.2)#, relwidth=0.12, relheight=0.2)
listaExtenciones = Listbox(root)
listaExtenciones.place(relx=relxExt, rely=0.28, width=160)#, relheight=0.5, relwidth=0.24)

entryExtencion = Entry(root)
entryExtencion.place(relx=relxExt, rely=0.715,width=160)#, relheight=0.08, relwidth=0.24)

Button(root,text="Eliminar",command=eliminarExtencion).place(relx=relxExt, rely=0.77)#, relheight=0.08, relwidth=0.08)
Button(root,text="Añadir",command=anadirExtencion).place(relx=relxExt+separacion*2, rely=0.77)#, relheight=0.08, relwidth=0.08)
Button(root,text="Guardar",command=saveTxt).place(relx=relxExt+separacion*3.3, rely=0.87, relheight=0.08, relwidth=0.15)
#Button(root,text="Cargar",command=loadTxt).place(relx=relxExt+separacion*3, rely=0.62, relheight=0.08, relwidth=0.08)
#Button(root,text="gar",command=Fallos0).place(relx=relxExt+separacion*4, rely=0.62, relheight=0.08, relwidth=0.08)

#------------------------

# Botones Principales
Button(root,text="Organizar",command=moverArchivos).place(relx=relxExt, rely=0.1)#, relheight=0.08, relwidth=0.15)
Button(root,text="Crear Carpetas",command=crearCarpetas).place(relx=relxExt+0.25, rely=0.1)#, relheight=0.08, relwidth=0.15)
Button(root,text="Ubicacion",command=obtenerUbicacion).place(relx=relxExt+0.58, rely=0.1)#, relheight=0.08, relwidth=0.15)


root.protocol("WM_DELETE_WINDOW", saveTxt()) # Al cerrar guarda

root.mainloop()
#os.makedirs('Otros') # Crea una carpeta
Responder
#2
¡Gracias por el aporte! Smile
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)