Вопрос

Я написал программу, которая принимает частичный RSS-канал и выводит полную, но это один случай по иссле этого. Рецепт для одного сайта не совпадает с рецептом для другого. Итак, что я делаю, это посмотреть на базенное имя домена (например, NYT или WSJ) и выберите модуль на основе этого. Хотя мне нужно загрузить каждый модуль перед рукой и иметь логическое состояние для каждого рецепта.

То, что мне нужно, это способ просто иметь отдельные модули в своей собственной папке, и когда я анализирую базенное значение URL, я хочу, чтобы он искать модуль, загрузите его и возьмите некоторое действие. Поэтому я хочу, чтобы основная база кода была независимой от модулей. Я хочу быть в состоянии добавить модули в будущем и никогда не касаться части кода, которая взаимодействует с ними.

Вот пример кода

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

Как вы можете видеть, я называю парсером отдельного модуля. У меня есть много из них на основе каждого сайта. Я хочу рижать народ, а затем иметь возможность искать модуль, загрузить его и позвонить, а затем, если оно не будет, сообщить об этом и попробуйте метод по умолчанию.

Это было полезно?

Решение

Похоже, вы ищете __import__ функция. Эта функция делает то же самое, что import Заявление, но позволяет передавать имя для импорта, который может быть известен только во время выполнения.

Так что вы могли бы сделать:

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

Вы захотите ловить исключения, такие как ImportError.

Другие советы

Вы можете использовать модуль Imp.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top