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!