当前位置: 首页 > 面试题库 >

使用字符串作为名称导入文件

田永春
2023-03-14
问题内容

我打算在不久的将来制作一组文件,而组织它的最佳方法是有一个列表,该列表将位于文件的最顶部,之后将要处理大量的代码。该列表控制什么以及如何操作。我只想写一次上述列表,并且该列表是以下格式的文件夹和文件名的列表:

[(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")的字符串,在本例中,打印测试路径,然后将该路径添加到列表(sys.path.append(path)),然后打印以确认它发生了,然后组装一个eval测试主模块将执行的字符串,并最终对其进行评估。

如您所见,我目前必须在顶部列出一个导入列表。我不能简单地进行导入testName(的内容testName是我要导入的模块的名称),因为它将尝试找到一个名为的模块testName,而不是一个名为内容的模块testName

我已经看到了一些完成此操作的示例,但是找不到适合我的情况的任何示例。如果有人可以从字面上抛出一大堆代码,那将是很棒的。

我还要求我不要因为使用eval而被悬挂,绘制或固定,它在一个受严格控制的环境中使用(它循环通过的列表在.py文件中,因此“最终用户”不应搞砸了)。


问题答案:

不知道我是否正确理解了所有内容,但是可以使用__import__以下命令动态导入模块:

mod = __import__(testName)
mod.HelloWorld()

编辑
:我不知道__import__python文档不建议使用user用户代码(如Bakuriu所述)

这也应该起作用,并且将被认为是更好的样式:

import importlib

mod = importlib.import_module(testName)
mod.HelloWorld()


 类似资料:
  • 当我使用console.log(req.body)时。上面写着 但看起来应该是: 你知道问题所在吗?我的HTML看起来像: 我的猫鼬模型是: 这是我的路线: 我想把它嵌入到一个ejs文件中。

  • 问题内容: 我试图创建一个唯一文件名的文件,每次运行脚本时,它只打算每周或每月执行一次。所以我选择使用日期作为文件名。 是我收到此错误的地方。 如果我使用静态文件名,它可以工作,打开功能是否存在问题,这意味着您不能传递这样的字符串? name是一个字符串,其值包括: 非常感谢您的帮助 问题答案: 您需要在字符串后面直接输入: 您的代码不起作用的原因是,您正在尝试的文件不是字符串格式,而且也是无效的

  • 问题内容: 我正在编写一个以命令作为参数的Python应用程序,例如: 我希望应用程序是可扩展的,也就是说,能够添加实现新命令的新模块而不必更改主应用程序源。这棵树看起来像: 因此,我希望应用程序在运行时找到可用的命令模块并执行相应的命令模块。 Python定义了函数,该函数使用一个字符串作为模块名称: 该函数导入模块名称,可能使用给定的全局变量和局部变量来确定如何在包上下文中解释该名称。from

  • 问题内容: 有没有办法在Javascript中将变量名作为字符串获取?喜欢 我想这样做: 更新 我正在尝试使用JavaScript连接浏览器和另一个程序。我想将实例名称从浏览器发送到另一个程序以用作回调方法: 从另一个程序: 问题答案: 通常,在需要将名称映射到某个值并能够同时检索两者的情况下,可以使用哈希表。

  • 从java中字符串的值创建对现有对象的引用 在我的项目中,有很多按钮(目前大约70个);每个按钮都会在数据库的jlabel中提出一个问题。现在,根据用户的选择,每个按钮(swings的jButton)将被分配颜色,这取决于用户是否想查看问题,或者他是否标记了问题的答案。 一种方法是为每个jbutton的actionperformed编码,并在每个jbutton中使用if-else来获得确切的颜色,

  • 问题内容: 有什么办法可以将Swift类型名称作为带有名称空间(或框架名称)的字符串? 例如,如果有一个名为的类,我想获取类似的字符串。 以下仅返回类名。 我还想获得框架名称作为名称空间。 问题答案: 用途: 从Xcode 7发行说明 : 默认情况下,现在可以打印类型名称和枚举大小写,并将其转换为String而不带限定符。或仍可用于获取完全限定的名称。