在一个小项目中,我有以下路径结构:
main.py
Data---
|
__init__.py
Actions_2016_01.py
Actions_2016_02.py
Actions_2016_03.py
... and so on...
每个'Action_date.py'文件都包含一个名为
的列表data = [something_1, something_2, ...]
现在我正在尝试将'Action_date.py'文件的所有数据列表添加到'main.py'文件中的单个列表中。
我试过像
这样的东西files = os.listdir(os.path.join(os.path.dirname(__name__), 'Data'))
all_data = []
for name in files:
if name.startswith('Actions'):
import Data.name
all_data.extend(name.data)
但这根本不起作用......我正在
ImportError: No module named 'Data.name'
作为输出。
答案 0 :(得分:0)
我找到了解决方案。只需使用importlib
模块即可。
答案 1 :(得分:0)
您可以让Data
包__init_.py
完成工作:
def _import_modules():
""" Dynamically import certain modules in the package, extract data in each
of them, and store it in a module global named all_data.
"""
from fnmatch import fnmatch
import traceback
import os
global __all__
__all__ = []
global all_data
all_data = []
globals_, locals_ = globals(), locals()
# dynamically import the desired package modules
for filename in os.listdir(os.path.join(os.path.dirname(__name__), 'Data')):
# process desired python files in directory
if fnmatch(filename, 'Actions*.py'):
modulename = filename.split('.')[0] # filename without extension
package_module = '.'.join([__name__, modulename])
try:
module = __import__(package_module, globals_, locals_, [modulename])
except:
traceback.print_exc()
raise
all_data.extend(module.data)
__all__.append('all_data')
_import_modules()
允许您在main.py
中执行此操作:
import Data
print(Data.all_data)
这是my answer对问题How to import members of modules within a package的修改?