02-06-2021, 10:35 PM 
		
	
	
		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.
	
	
	
	
	
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
 
 

 


