gpt4 book ai didi

python - 从文件夹动态导入所有模块

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:02 25 4
gpt4 key购买 nike

我知道有 this question ,但不仅它们不起作用,而且这也不是我想要的。我正在开发一款赛车游戏,想从一个文件夹中动态加载所有轨道(它们存储为 .py 而不是 .json)。我不想知道轨道的名称,因为用户可以随意修改/添加它们。我只想导入他们的数据。所以,例如:

>tracks 
>>track0.py
>>track1.py
>>track2.py
>>track3.py
>>track4.py

在每个轨道中,我有这样的数据:

track_ground_data = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1],
[1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1],
[1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1],
[1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1],
[1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1],
[1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1],
[1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1],
[1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1],
[1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1],
[1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1],
[1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1],
[1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]

我需要像这样导入每个轨道模块:

loaded_tracks = [t for t in tracks] # Where tracks is the folder.

然后像这样访问给定的track_ground_data:

loaded_tracks[0].track_ground_data

如果我知道 Python 对其导入如此苛刻,我会使用 json 而不是 .py。

最佳答案

Python 不会自动导入包中包含的子模块。因此,import tracks加载tracks/__init__.py

但是您可以将代码放入 __init__.py 文件中,该文件导入它在该目录中找到的所有模块。

例如在 __init__.py 中放置这样的东西:

import os
import importlib

__globals = globals()

for file in os.listdir(os.path.dirname(__file__)):
mod_name = file[:-3] # strip .py at the end
__globals[mod_name] = importlib.import_module('.' + mod_name, package=__name__)

当仅导入 tracks 时,应使您的子模块可用作 tracks.trackX

或者你可以使用exec:

import os
import importlib

for file in os.listdir(os.path.dirname(__file__)):
mod_name = file[:-3] # strip .py at the end
exec('import .' + mod_name)

更简洁的方法是使用导入 Hook 或实现您自己的自定义模块导入器。使用 importlib 有多种方法可以做到这一点另见 sys.path_hooks

关于python - 从文件夹动态导入所有模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46980637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com