Ir ao conteúdo

Python Algoritmo de busca em python


Ir à solução Resolvido por Swalls,

Posts recomendados

Postado

Basicamente eu tenho uma lista que contém o link e o nome de vários arquivos para serem baixados. Entretanto antes de baixar um arquivo eu verifico se esse arquivo já existe utilizando o seguinte codigo:

 

def getFiles(path):
    return [f for f in listdir(path) if isfile(join(path, f))]

def checkFileExist(file, path):
    files = getFiles(getImgsFolder(path))
    
    if any(file in s for s in files): return True

    return False



Entretanto esse método esta se mostrando muito lento visto que o path possui muitos arquivos, por tanto quando utilizo uma lista com uma grande quantidade de links ocorre uma demora imensa para verificar se um arquivo existe ou não no caminho especifico

  • Obrigado 1
Postado

Se for para buscar um arquivo em específico, recomendo usar a HashTable, pois a busca com ela é muito rápida para buscar um arquivo em específico. Mas se for para percorrer vários arquivos, ai ela não é a melhor, ai já depende muito da ordem de busca que você quer.

  • Curtir 2
Postado
11 minutos atrás, rdkthiago disse:

Se for para buscar um arquivo em específico, recomendo usar a HashTable, pois a busca com ela é muito rápida para buscar um arquivo em específico. Mas se for para percorrer vários arquivos, ai ela não é a melhor, ai já depende muito da ordem de busca que você quer.

Basicamente eu tenho uma lista com 1000 nomes de arquivos, eu preciso verificar se esses arquivos existem em uma determinada pasta (que possui por volta de 5000 arquivos), qual seria o melhor método para fazer isso ?

  • Curtir 1
  • Solução
Postado

@Arkcanjou seria algo mais ou menos assim que você quer?

[x for x in lista_com_1000 if not(os.path.exists(f"caminho_com_5000\\{x}"))]

ou seja,  crie uma lista com os nomes desses 1000, mas só os que não existem na pasta com 5000.

 

ps: à alguns dias me surgiu uma dúvida enquanto criava listas.. se os itens da lista estiverem em um arquivo, como um txt por exemplo, qual seria mais performático? criar a lista e instancia-la para usar no código ou criar um iterator que puxa do arquivo? indo pela lógica o iterar sobre o arquivo vai usar o HD/SSD e ficar fazendo um "swap", o que deixa mais lento.  porém nos testes que eu fiz ficou mais rápido, alguém sabe explicar? algumas que não necessitavam de ordem eu passava para set, mas mesmo assim ainda perdia.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...