[英]importing module from variable
我有不同的配置文件,它們基本上是定義變量的python文件,我想將它們導入到我的主程序中。
通常,我將擁有一個“ config_file1.py”並執行以下操作:
import config_file1 as params
# and then I can access the different parameters as
params.var1
params.var2
現在,我希望能夠選擇要使用的config_file,因此我想在調用程序時傳遞一個參數,以告知要使用的配置文件。 就像是:
config_filename = sys.argv[1]
import config_filename as params
但是,這會查找名為“ config_filename”的文件。
我想導入由config_filename值引用的文件
編輯:
基本上,我的程序將運行一組實驗,而這些實驗需要一組參數才能運行。
例如:
*** config1.py ****
num_iterations = 100
initial_value1 = 10
initial_value2 = 20
因此,我可以運行我的程序,將這些變量加載到內存中。
但是,另一個配置文件(config2.py)可能具有另一組參數,因此我希望能夠通過加載所需的配置文件來選擇要運行的實驗。
如果您確實要執行此操作,則可以使用importlib模塊:
import importlib
params = importlib.import_module(sys.argv[1])
然后您可以像這樣使用var
params.var1
這是針對您的詳細信息而不是問題。
如果要從文件加載變量,例如num_iterations = 100
, initial_value1 = 10
, initial_value2 = 20
,那么我真的建議使用某種配置,而不是濫用導入全局變量的方法。
Json是最簡單的方法,您可以在其中加載文件,然后直接得到一個字典:
>>> import json
>>> params = json.loads(config_file1)
{'num_iterations': 100, 'initial_value1': 10, 'initial_value2': 20}
另外,您可以使用ConfigParser,它看起來更好,但是我發現它很容易損壞。
除了使用import
語句,還可以使用__import__
函數,如下所示:
params = __import__('module_name')
定義:
importlib.__import__(name, globals=None, locals=None, fromlist=(), level=0)
參考: https : //docs.python.org/3/library/importlib.html#importlib。 進口
您可以這樣:
config_filename = sys.argv[1]
params = __import__(config_filename)
我不建議使用這種冒險的方法。 您放棄了sys.argv
處的所有控件,並且如果模塊中不存在任何named屬性,腳本可能會失敗。
相反,我建議明確控制傳入的受支持模塊是什么:
config_filename = sys.argv[1].lower()
if config_filename == 'os':
import os as params
elif config_filename == 'shutil':
import shutil as params
else: # unhandled modules
raise ImportError("Unknown module")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.