Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como encontrar o arquivo de outra forma ?

Dessa forma, vai apagar tudo que tiver um conjunto de ids: tipo capa 10. Se tivesse o arquivo capa 1000, 1001 e etc seriam apagados também, como achar o arquivo usando sinal de igualdade ? já tentei com == e não funcionou

Código do helpers.py

import os
from jogoteca import app 

# função para recuperar imagem do jogo
def recupera_imagem(id):
    # for que percorre todos os arquivios da pasta upload
    for nome_arquivo in os.listdir(app.config['UPLOAD_PATH']):
        # se encontrou o capaid.jpg no diretório
        if f'capa{id}' in nome_arquivo:
            # retorna o caminho completo da imagem
            return nome_arquivo

    # senão retorna a capa padrão    
    return 'capa_padrao.PNG'

def deleta_arquivo(id):
    arquivo = recupera_imagem(id)
    if arquivo != 'capa_padrao.jpg':
        os.remove(os.path.join(app.config['UPLOAD_PATH'], arquivo))
2 respostas
solução!

Olá Antônio, tudo bem com você?

Você está correto em apontar que a comparação feita na condição if f'capa{id}' in nome_arquivo pode gerar conflitos quando existem arquivos com nomes semelhantes, como 'capa1', 'capa10' e 'capa100'. No entanto, é importante destacar que o return dentro do if garante que a função retorne o primeiro arquivo encontrado que contém a string 'capa{id}', resolvendo assim esse problema. Ou seja, em um caso onde o id é 10 e temos as capas 10, 100 e 1000, a primeira ocorrência será enviada, neste caso, o 10, que corresponde o nosso id. O mesmo ocorre para os outros números.

Indo para um teor mais prático, verifique como a função se comporta com o return e com a ausência dele:

Função sem retorno:

def recupera_imagem(id):
    nomes_arquivos = ['capa1.jpg', 'capa2.jpg', 'capa10.jpg', 'capa100.jpg']
    for nome_arquivo in nomes_arquivos:
        if f'capa{id}' in nome_arquivo:
            print("Imagem Recuperada: " + nome_arquivo)

id = 10
imagem = recupera_imagem(id)

Resultado:

Imagem Recuperada: capa10.jpg
Imagem Recuperada: capa100.jpg

Função com retorno:

def recupera_imagem(id):
    nomes_arquivos = ['capa1.jpg', 'capa2.jpg', 'capa10.jpg', 'capa100.jpg']
    for nome_arquivo in nomes_arquivos:
        if f'capa{id}' in nome_arquivo:
            return nome_arquivo

id = 10
imagem = recupera_imagem(id)
print("Imagem recuperada: " + imagem)

Resultado:

Imagem recuperada: capa10.jpg

Ou seja, o apresentado em aula funciona para o retorno do id passado como parâmetro, sem gerar conflitos.

Todavia, se você quiser encontrar o arquivo exatamente correspondente ao ID, você pode modificar a função recupera_imagem(id) para usar um sinal de igualdade (==) em vez do operador in. Por exemplo:

def recupera_imagem(id):
    for nome_arquivo in os.listdir(app.config['UPLOAD_PATH']):
        if nome_arquivo == f'capa{id}.jpg':
            return nome_arquivo
    return 'capa_padrao.jpg'

Nesta versão, o operador == é usado para verificar se o nome do arquivo é exatamente igual a 'capa{id}.jpg'. Portanto, apenas o arquivo com o nome 'capa10.jpg' será considerado um resultado válido para o ID 10.

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Muito obrigado