Pergunta

Eu escrevi um programa que recebe um feed RSS parcial e produz um completo, mas é um caso a caso. A receita de um site não é a mesma da receita para a outra. Então, o que eu faço é olhar para o nome de base do domínio (por exemplo, NYT ou WSJ) e escolher um módulo com base nisso. Embora eu precise carregar cada módulo antes da mão e ter uma condição lógica para cada receita.

O que eu preciso é uma maneira de ter apenas os módulos individuais em sua própria pasta e quando eu analiso o nome de base do URL, quero que ele procure o módulo, carregue -o e tome alguma ação. Então, eu quero que a base de código principal seja independente dos módulos. Quero poder adicionar os módulos no futuro e nunca tocar na parte do código que interage com eles.

Aqui está um exemplo de código

if "nyt" == feed:
        nyt.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)

Como você pode ver, eu chamo o analisador do módulo individual. Eu tenho muitos deles com base em cada site. Quero feed de palheta e, em seguida, poder procurar o módulo, carregá -lo e chamá -lo e, se não existir, relate -o e tente o método padrão.

Foi útil?

Solução

Parece que você está procurando o __import__ função. Esta função faz a mesma coisa que o import Declaração, mas permite que você passe um nome para importar que só possa ser conhecido em tempo de execução.

Então você pode fazer:

parsemodule = __import__(feed)
parsemodule.parser(posixpath.basename(url), urldir, rss_file_path, url, feed)

Você vai querer capturar exceções como ImportError.

Outras dicas

Você pode usar o módulo IMP.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top