Skip to content

Instantly share code, notes, and snippets.

@it6c65
Last active October 20, 2020 05:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save it6c65/4385af9d5d2581c065abd65cbfe8b697 to your computer and use it in GitHub Desktop.
Save it6c65/4385af9d5d2581c065abd65cbfe8b697 to your computer and use it in GitHub Desktop.
Un simple script para ordenar libretas en fundamemoria
#!/usr/bin/env python3
# Created by Luis Ilarraza for Fundamemoria Documental
# This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
from tkinter import *
from tkinter import filedialog
from shutil import copy
from copy import deepcopy
import os
# Interfaz Tk
window = Tk()
# datos de la ventana
window.title("Ordenando Libretas (fundamemoria)")
window.geometry('430x30')
# etiqueta al lado de la barra de carpeta
lbl = Label(window, text="Buscar:")
lbl.grid(column=0, row=0)
# barra de la carpeta seleccionada
txt = Entry(window,width=40)
txt.grid(column=1, row=0)
# Accion del boton para indicar carpeta
def clicked():
dir = filedialog.askdirectory()
txt.insert(0, dir)
# boton para abrir carpeta
open_file = Button(window, text="Abrir", command=clicked)
# tama;o del boton
open_file.grid(column=2, row=0)
# quitar carpeta actual
def cleaner_dir():
txt.delete(0, len(txt.get()))
# boton de quitar carpeta
clean_file = Button(window, text="Limpiar", command=cleaner_dir)
# tama;o del boton
clean_file.grid(column=3, row=0)
# Algoritmo para ordenar los archivos
def ordering_files():
# Lista los archivos de la carpeta se;alada
src_files = os.listdir(txt.get())
# Crea la carpetas a operar
os.mkdir(txt.get()+"/original")
os.mkdir(txt.get()+"/ordenado")
# Hace una copia el original
for file in src_files:
fullpathname = os.path.join(txt.get(), file)
copy(fullpathname, txt.get()+"/original")
# Ordenamiento de archivos
# @counter es el contador principal de los archivos manejados al reverso
# @track_pairs es el rastreador de pares y siempre debe ser impar
# @track_odds es el rastreador de impares y siempre debe ser par
counter = 0
track_pairs = 1
track_odds = 2
for index, file in enumerate(src_files, start=1):
# el primer archivo es el mismo que antes del ordenamiento
if index == 1:
fullpathname = os.path.join(txt.get(), file)
renaming(fullpathname, index)
else:
counter += 1
fullpathname = os.path.join(txt.get(), src_files[-counter])
# Utiliza el indice actual ademas del contador para determinar los archivos
# el primer contador es literalmente el ultimo archivo
# lo demas van dependiendo de si el contador es par o impar para determinar
# cual de los ultimos archivos va a utilizar
if counter == 1:
renaming(fullpathname, index)
elif counter % 2 == 0:
renaming(fullpathname, index+track_pairs)
track_pairs += 2
else:
renaming(fullpathname, index+track_odds)
track_odds += 2
# El archivo siguiente
# se determina el par posterior despues del ultimo archivo
# siendo este el archivo actual en el que esta el ciclo
nextpath = os.path.join(txt.get(), file)
renaming(nextpath, index+counter)
# funcion para renombrar los archivo mostrando su indice como su nombre
def renaming(path, idx):
actualpath = os.path.join(txt.get(), "ordenado")
os.rename(path, os.path.join(actualpath, str(idx)+".jpg"))
# Boton para llamar al algoritmo de ordenamiento
order_files = Button(window, text="Ordenar", command=ordering_files)
# Tama;o de boton
order_files.grid(column=4, row=0)
# Intefaz de ventana
window.mainloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment