在 Python 中迭代模块

2023-12-21

所以我有一个嵌套文件夹,其中有执行某些操作的模块。 注意:它们不是类,只是脚本。 我想迭代这些模块。 我现在拥有的:

from scripts.module_1 import train_module_1 
from scripts.module_2  import train_module_2  
from scripts.module_3 import train_module_3
from scripts.module_4 import train_module_4 


def test_train_module_1():
    try:
        train_module_1.main('test.csv')
    except ValueError as value_error:
        assert False, "test_train_module_1  failed:" + str(value_error)
...
The same for all train modules

这就是我的目录的样子,我的代码是这样写的my_test.py :

tests
   my_test.py
scripts
   module_1
      __init__.py
      train_module_1.py
      module_1_blabla.py
   module_2
      __init__.py
      train_module_2.py
      module_2_blabla.py
...

我想知道我是否可以以某种方式在每个模块中迭代这些模块 仅获取以“train_”开头的文件 并执行每个中的主要功能。我基本上知道怎么做但是我没有找到这种迭代的好的解决方案。 我需要动态地从脚本获取模块。这样即使有人添加模块我也不需要更改这里的代码。

有没有类似的东西:

for i in scripts.children():
    for j in i.children():
        if j.__name__.startswith('train_'):
            try:
                j.main(f'{j.__name__}_test.csv')
            except ValueError as value_error:
                assert False, f'test_{j.__name__}  failed: {value_error}'

提前致谢


是的,有多种方法,具体取决于您的具体需求。

例如,您可以获取目录中模块名称的列表,然后使用内置函数导入它们__import__('...') https://docs.python.org/3/library/functions.html#__import__像这样:

for module_name in list:
    mod = __import__(module_name)
    mod.main(module_name + "_test.csv)

另一方面,如果您已经导入了模块,则可以通过查看来找到它们sys.modules(这是所有当前导入模块的字典)。

import sys
for name in sys.modules:
    if name.startswith("train_"):
        mod = sys.modules[name]
        mod.main(name + "_test.csv")

UPDATE:这是一个更完整的版本,它遍历目录结构并查找以以下开头的所有 Python 模块train_,导入它们,并执行它们main-功能。

import os

for dir in os.scandir('.'):
    if dir.is_dir():
        for file in os.scandir(dir.path):
            if file.name.startswith('train') and file.name.endswith('.py'):
                name = file.name[:-3]      # without the '.py' at the end
                package = __import__(dir.name + '.' + name)
                mod = getattr(package, name)
                mod.main()

请注意,__import__函数返回基本包(即scripts在你的情况下),所以我们必须通过检索我们想要的模块getattr() first.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中迭代模块 的相关文章

  • 如何计算 pandas datetime 对象的均值和方差?

    如何计算 YYYY MM DD 形式的 python 日期时间对象的汇总统计数据 均值和标准差 我想对具有不同 ID 的不同日期时间对象组执行此操作 数据如下 import datetime as dt df pd DataFrame Da
  • 如何传递架构以从现有数据帧创建新数据帧?

    要将 schema 传递到 json 文件 我们这样做 from pyspark sql types import StructField StringType StructType IntegerType data schema Stru
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • Python 内置的 super() 是否违反了 DRY?

    显然这是有原因的 但我没有足够的经验来认识到这一点 这是Python中给出的例子docs http docs python org 2 library functions html super class C B def method se
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 使用 Python Oauthlib 通过服务帐户验证 Google API

    我不想使用适用于 Python 的 Google API 客户端库 但仍想使用 Python 访问 Google APIOauthlib https github com idan oauthlib 创建服务帐户后谷歌开发者控制台 http
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS

随机推荐

  • Python 3.6:如何安装橡皮筋?

    我想用this https pyrubberband readthedocs io en stable generated pyrubberband pyrb time stretch html pyrubberband pyrb time
  • 需要帮助更改算法

    我需要制作一个扫描屏幕上每个像素的程序 我目前正在使用这个 public static void Spiral starting point x int Math Floor Screen PrimaryScreen Bounds Heig
  • Rails find:使用条件,同时通过不同的命名关联两次包含同一个表

    我有用户发送给其他用户的帖子 有两种模型 post 和 user 并且 post 具有以下命名关联 belongs to from user class name gt User foreign key gt from user id be
  • 游戏之间的冲突!框架 2.5 和 gRPC 0.13

    Play 2 5 0使用Netty 4 0 33 而gRPC需要Netty 4 1 0 用于http2支持 这会导致以下异常 error p c s n PlayRequestHandler Exception caught in Nett
  • 将正则表达式绑定到 PDO 语句中的 PDO 参数

    好的 我对 php 和 mysql 相当陌生 我正在创建一个 mysql 数据库的 php 前端 我使用 PDO 驱动程序访问数据库 因为它可以防止 SQL 注入攻击 到目前为止 一切都很好 直到我遇到这个问题 我有一个搜索功能 用户可以输
  • MySQL 错误 1443 解决方法

    我相信我的问题可以参考另一个问题 https stackoverflow com questions 1225496 mysql 1443 what does it mean标题几乎相同 但不幸的是答案对我来说不够清楚 而且这个问题也有 6
  • 使用css重置时如何在段落之间添加空格? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 使用 css 重置时 在段落之间添加空格的最安全 无高度变化的跨浏览器方法是什么 div p class text paragraph1 p p
  • Java GC(分配失败)

    为什么总是 GC 分配失败 适用于 linux amd64 JRE 的 Java HotSpot TM 64 位服务器 VM 25 25 b02 1 8 0 25 b17 CommandLine flags XX CMSInitiating
  • 作业完成后 Jenkins 杀死 JBoss 服务器

    我使用 Ant 通过 Jenkins 启动 关闭 JBoss 5 服务器 Ant java spawn 和 fork 设置为 true 因此命令在后台执行 Jenkins 成功启动服务器 等待两分钟 Jenkins 中的 睡眠 命令 然后在
  • 使用比较 Xcode iOS 9 中“其他进程”内存不足

    我的应用程序在内存为 0 5GB 的设备上崩溃 然而 在 Xcode 中分析内存使用情况 它很少超过 140MB 我用仪器检查过泄漏情况 但没有发现明显的泄漏 但是 当我运行我的应用程序时 其他进程 使用的内存总是非常高 这是启动后的静止状
  • 如何在 Xamarin Forms 中创建阴影

    如何使用 Xamarin Forms 在按钮或标签上创建阴影 我目前正在使用 Xamarin Forms 1 3 并尝试在 XAML 中执行此操作 如果可能 有没有人有一个可行的例子可以给我指点 我还没有尝试过这个 但您可以创建同一控件的
  • awk 搜索另一个文件中的字段

    我需要在第二个文件中搜索一个文件中的字段 想知道 awk 是否是正确的解决方案 file 1 one two file 2 something one balh one blah two blah two 所需输出 one somethin
  • 为什么在检查最近的提交后我有一个分离的 HEAD?

    最近 在使用 git 存储库时 我想查看旧提交中的代码 68cce45 所以我做了 git checkout 68cce45 查看更改后 我想返回到存储库的当前版本并继续工作 自从2bcfd11是最近的提交 我做了 git checkout
  • 如何将自动布局与容器转换结合使用?

    如何将自动布局与 UIViewController 容器转换方法一起使用 void transitionFromViewController UIViewController fromViewController toViewControl
  • 将一个数据系列绘制在另一个数据系列下方

    当您在 Matlab 中绘制图形时 最近绘制的数据系列会放置在已有数据之上 例如 figure hold on plot sin linspace 0 pi linewidth 4 color 0 0 1 plot cos linspace
  • Android Firebase 应用程序分发 - 服务凭证文件不存在。请检查服务凭证路径并重试

    我正在尝试从 Crashlytics Beta 迁移到 Firebase App Distribution 中间的 CircleCi CircleCi 中的构建失败并出现以下错误 什么地方出了错 任务 FiverrApp appDistri
  • Odoo 销售点 + 邮箱:如何修改收据

    我需要修改销售点收据 在 Odoo 销售点中 有两个打印收据的模板 XmlReceipt 和 PostTicket 当我使用 Posbox 时 我想我必须修改 XmlReceipt 请问有没有办法继承原来的模板 我找到了有关如何使用 Pos
  • 没有错误:无法在谷歌云存储上查看上传的文件

    使用云函数在云函数上运行 python 代码云函数 python https github com MartinSahlen cloud functions python 我正在云上处理图像 现在我想将该图像保存在google cloud
  • 使用 TStringList 的奇怪 EOutOfMemory 异常

    我有一个系统 它加载一些压缩到 log 文件中的文本文件 然后使用多个线程解析为信息类 每个线程处理不同的文件并将解析的对象添加到列表中 该文件是使用 TStringList 加载的 因为它是我测试过的最快的方法 文本文件的数量是可变的 但
  • 在 Python 中迭代模块

    所以我有一个嵌套文件夹 其中有执行某些操作的模块 注意 它们不是类 只是脚本 我想迭代这些模块 我现在拥有的 from scripts module 1 import train module 1 from scripts module 2