Use selected path in listdir

Asked

Viewed 202 times

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()

1 answer

0

From what I understand, your problem is just getting the directory to use on open. So just return the path in the function UploadDir and UploadLista. Example:

def UploadLista(event=None):
    filenamelist = filedialog.askopenfilename()
    print('Lista Selecionada', filenamelist)

    msg_selecionar = Label(janela, text= filenamelist )
    msg_selecionar.place(x=180, y=200)
    return filenamelist

After that, just get the return of the function and use the path within the open. Example:

def bt_click_separar():
    traco()
    print ('Movendo Fotos...')
    traco()
    import os.path
    import shutil


    # Dúvida: Porque usou o UploadDir ao invés de UploadLista aqui ?
    # Como nesse trecho do código você disse que o objetivo era obter o
    # caminho do arquivo contendo a lista, eu tomei a liberdade 
    # de substituir UploadDir por UploadLista.

    filenamelist = UploadLista() # Obtém o retorno da função. 

    arq = open(filenamelist, 'r')

    # Resto do código...
  • 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? !

  • 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

  • If my answers were helpful to you, you can click vote on that up arrow.

  • 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.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.