0
I’m starting to learn python (it’s actually my first language kk).
I work with photos and I have a project to develop a photo renaming tool, but I’m having a hard time integrating some parts of the code. See if you can help me:
The tool has 4 buttons:
Select List (Here we select a list in . txt)
Select Directory (Here we will choose where to run the separate code and rename)
Split (Here we run a part of the code that separates the photos in the list into a folder)
Rename (Here we run the code part responsible for renaming the separate photos according to the created list)
Currently I have to copy the python file into the directory and it looks for the files based on the parameters defined for the directory where it is. The idea would be to run python in one place and run it in other directories.
My difficulty is in putting list directories and directories within codes that separate and rename
The code is a little long, but follow it below:
import os
from tkinter import *
import tkinter as tk
janela = tk.Tk()
def traco():
print('-'*70)
#____________________________________________________________________
#INFORMAÇÕES INICIAIS
janela.title('Renamer Book v.2.0')
janela.geometry('500x600')
#____________________________________________________________________
#INSTRUÇÕES
frase1 = Label(janela, text="Para que o Renamer Book funcione, a lista deverá seguir a seguinte estrutura:")
frase1.place(x=50, y=100)
frase2 = Label(janela, text="nomeoriginal.extensão + ponto e vígula + novonome.extensão")
frase2.place(x=80, y=120)
frase3 = Label(janela, text="EX: IMG2589.jpg;guilherme-micheletti-mc-IMG2589.jpg")
frase3.place(x=100, y=140)
#____________________________________________________________________
#FUNÇÃO - SELECIONAR LISTA
from tkinter import filedialog
def UploadLista(event=None):
filenamelist = filedialog.askopenfilename()
print('Lista Selecionada', filenamelist)
msg_selecionar = Label(janela, text= filenamelist )
msg_selecionar.place(x=180, y=200)
#____________________________________________________________________
#FUNÇÃO - SELECIONAR DIRETÓRIO
from tkinter import filedialog
def UploadDir(event=None):
filenamedir = filedialog.askdirectory()
print('Diretório Selecionado', filenamedir )
msg_selecionar = Label(janela, text= filenamedir )
msg_selecionar.place(x=199, y=242)
#____________________________________________________________________
#FUNÇÃO - SEPARAR
def bt_click_separar():
traco()
print ('Movendo Fotos...')
traco()
import os.path
import shutil
filenamelist = UploadDir
arq = open(PRECISO COLOCAR O CAMINHO DA LISTA AQUI, 'r')
dir_arquivo = ''
for linha in arq:
nomeantigo, novonome = linha.rstrip().split(';')
dir_arquivo = os.path.dirname(nomeantigo)
if os.path.isdir('PRECISO COLOCAR O LOCAL DO DIRETÓRIO SELECIONADO + .\COMPLETO'): # verifica se este diretorio ja existe
print ('-')
else:
os.mkdir('PRECISO COLOCAR O LOCAL DO DIRETÓRIO SELECIONADO + .\COMPLETO') # criar a pasta caso não exista
print ('Pasta criada com sucesso!')
if os.path.isfile(nomeantigo): # verifica se arquivo existe
print ()
else:
print (' ')
print (' ')
print ('***ALERTA BOOK*** O arquivo do formando não está na pasta ----> ' , nomeantigo )
print (' ')
print (' ')
lbseparar1 = Label(janela, text="***ALERTA BOOK*** Algum arquivo não está na pasta ou já foi movido.")
lbseparar1.place(x=60, y=300)
continue
shutil.move(nomeantigo,'PRECISO COLOCAR LOCAL DO DIRETÓRIO SELECIONADO + .\COMPLETO')
print (nomeantigo, 'Movido')
lbseparar2 = Label(janela, text="Arquivos separados!")
lbseparar2.place(x=80, y=280)
#____________________________________________________________________
#FUNÇÃO - RENOMEAR
def bt_click_renomear():
traco()
print('Renomeando Fotos...')
traco()
arq = open(PRECISO COLOCAR O CAMINHO DA LISTA AQUI, 'r')
os.chdir(PRECISO COLOCAR O CAMINHO DO DIRETÓRIO AQUI)
for linha in arq:
nomeantigo, novonome = linha.rstrip().split(';')
novonome = novonome.lower()
novonome = novonome.replace(' ','-')
novonome = novonome.replace('_','-')
novonome = novonome.replace('- ','-')
novonome = novonome.replace('-- ','-')
novonome = novonome.replace('--','-')
novonome = novonome.replace('---','-')
novonome = novonome.replace('----','-')
novonome = novonome.replace('ç','c')
novonome = novonome.replace('á','a')
novonome = novonome.replace('ã','a')
novonome = novonome.replace('â','a')
novonome = novonome.replace('é','e')
novonome = novonome.replace('ê','e')
novonome = novonome.replace('í','i')
novonome = novonome.replace('ó','o')
novonome = novonome.replace('ô','o')
novonome = novonome.replace('ú','u')
novonome = novonome.replace('meio-corpo','mc')
novonome = novonome.replace('corpo-inteiro','ci')
dir_arquivo = os.path.dirname(novonome)
if os.path.isfile(nomeantigo): # verifica se arquivo existe
print ('-')
else:
print (' ')
print (' ')
print ('***ALERTA BOOK*** O arquivo não está na pasta -------> ' , nomeantigo )
print (' ')
print (' ')
lbrenomear1 = Label(janela, text="***ALERTA BOOK*** Algum arquivo não está na pasta ou já foi renomeado.")
lbrenomear1.place(x=50, y=320)
continue
os.rename(nomeantigo, novonome)
print(f'Arquivo {nomeantigo} renomeado para {novonome}')
lbrenomear2 = Label(janela, text="Arquivos renomeados!")
lbrenomear2.place(x=80, y=320)
#____________________________________________________________________
#BOTOES
#Separar
btseparar = Button(janela, width=20, text='Separar', command=bt_click_separar)
btseparar.place(x=80, y=550)
#Renomear
btrenomear = Button(janela, width=20, text='Renomear', command=bt_click_renomear)
btrenomear.place(x=270, y=550)
#Selecionar Lista
selecionar_lista = tk.Button(janela, text='Selecionar Lista', command=UploadLista)
selecionar_lista.place(x=80, y=200)
#Selecionar Diretório
selecionar_dir = tk.Button(janela, text='Selecionar Diretório', command=UploadDir)
selecionar_dir.place(x=80, y=240)
#____________________________________________________________________
janela.mainloop()
Good evening Jean! Cara, I have another "problem". I did what you said, but when I press the separate or rename button, it takes the entire function’s Return, opening a window to choose the list and the directory again. Is there any possibility that this might not happen? And Return is only the result of the functions? !
– Guilherme Micheletti
I don’t quite understand what you want, but come on. If you want to run the function only once, opening the window to choose a directory and next time you do not need to open the window, you can declare the variable that gets the directory as global and use a conditional. See this example code: https://repl.it/repls/MiniatureFrighteningCryptos
– JeanExtreme002
If my answers were helpful to you, you can click vote on that up arrow.
– JeanExtreme002
I’ll try to apply that method to the code, then I’ll get back to you if it worked out. About the response vote, I think I still can’t vote for having a user done recently kk.
– Guilherme Micheletti