Импортировать файл, используя строку как имя

Возможный дубликат:
Импорт динамического модуля в Python

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

[(folder/filename, bool, bool, int), (folder/filename, bool, bool, int)] 

Как вы можете видеть, folder/filename одинаковы (вроде). Имя файла – это имя папки с .py в конце, но при импорте XXX вам не нужно импортировать XXX.py, поэтому я не вижу, чтобы это вызывало проблему.

Проблема, с которой я сталкиваюсь, импортируется с использованием этого метода …

 for (testName, auto, hardware, bit) in testList: print(testName) paths = "\\" + testName print paths addpath(paths) sys.modules[testName] = testName # One of a few options I've seen suggested on the net print("Path Added") test = testName + ".Helloworld()" eval(test) 

Поэтому для каждого теста, который у меня есть, напечатайте имя, "\\testName" строку, содержащую путь ( "\\testName" ), в этом примере напечатайте тестовый путь, затем добавьте путь к списку ( sys.path.append(path) ), затем распечатайте, чтобы подтвердить, что это произошло, затем соберите строку, которая будет выполнена eval для основного модуля тестов и, в конечном итоге, будет его оценена.

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

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

Я также прошу, чтобы меня не повесили, не нарисовали и не расквартировали для использования eval, он используется в очень контролируемой среде (список, через который он циклически входит в файл .py, поэтому нет «конечного пользователя» беспорядок с ним).

3 Solutions collect form web for “Импортировать файл, используя строку как имя”

Не уверен, правильно ли я все понял, но вы можете импортировать модуль динамически с помощью __import__ :

 mod = __import__(testName) mod.HelloWorld() 

Изменить : я не знал, что использование __import__ было обескуражено документами python для кода пользователя: Документация __import__ (как отметил Бакуриу)

Это также должно работать и будет считаться лучшим стилем:

 mod = importlib.import_module(testName) mod.HelloWorld() 
  1. Никогда, никогда, никогда не связывайтесь с sys.modules напрямую, если вы точно не знаете, что делаете.
  2. Есть много способов сделать то, что вы хотите:
    1. __import__ функция __import__
    2. Использование imp.load_module
    3. Использование importlib.import_module

Я бы не стал напрямую использовать __import__ и importlib.import_module на importlib.import_module (что также предлагается в конце документации __import__ ).

Добавьте путь, по которому модуль находится в sys.path. Импортируйте модуль с помощью функции __import__, которая принимает строчную переменную в качестве имени модуля.

 import sys sys.path.insert(0, mypath) # mypath = path of module to be imported imported_module = __import__("string_module_name") # __import__ accepts string imported_module.myfunction() # All symbols in mymodule are now available normally 
  • Форматирование списка текста в столбцы
  • расщепление строк python
  • Почему строки Python неизменяемы? Рекомендации по их использованию
  • Формат форматирования строки форматирования
  • Python Сортировка последних персонажей
  • Python: найдите подстроку в строке и верните индекс подстроки
  • Обнаружение гласных против согласных в Python
  • Вопрос о уникальности экземпляра строки в python
  • Интерполяция строк Python: показывать только нужные десятичные знаки
  • Проверка ввода пользовательских строк в Python
  • Как найти самую длинную строку в Python?
  • Python - лучший язык программирования в мире.