如何从 Python 中的不同文件夹导入所有文件
how to import all files from different folder in Python
目录中有 __init__.py
,我可以通过
导入它
from subdirectory.file import *
但是我想导入该子目录中的所有文件;所以我尝试了
from subdirectory.* import *
这没有用。有什么建议吗?
如果你有以下结构:
$ tree subdirectory/
subdirectory/
├── file1.py
├── file2.py
└── file3.py
并且您希望程序自动获取位于此 subdirectory
中的每个模块并以特定方式处理它,您可以按如下方式实现:
import glob
# Get file paths of all modules.
modules = glob.glob('subdirectory/*.py')
# Dynamically load those modules here.
有关如何动态加载模块的信息,请参阅 this question。
在您的 subdirectory/__init__.py
中,您可以通过以下方式导入所有本地模块:
from . import file1
from . import file2
# And so on.
您可以通过
导入本地模块的内容
from .file1 import *
# And so on.
然后您可以通过
导入这些模块(或内容)
from subdirectory import *
使用 __init__.py
中的属性 __all__
,您可以控制在 from ... import *
语句中导入的内容。因此,如果您不想导入 file2.py
,例如您可以这样做:
__all__ = ['file1', 'file3', ...]
您可以通过
访问这些模块
import subdirectory
from subdirectory import *
for name in subdirectory.__all__:
module = locals()[name]
您的 __init__.py
文件应如下所示:
from file1 import *
from file2 import *
然后你可以做:
from subdirectory import *
在尝试了一些不同的解决方案后找到了这个方法(如果您在相邻目录中有一个名为 'folder' 的文件夹):
for entry in os.scandir('folder'):
if entry.is_file():
string = f'from folder import {entry.name}'[:-3]
exec (string)
目录中有 __init__.py
,我可以通过
from subdirectory.file import *
但是我想导入该子目录中的所有文件;所以我尝试了
from subdirectory.* import *
这没有用。有什么建议吗?
如果你有以下结构:
$ tree subdirectory/
subdirectory/
├── file1.py
├── file2.py
└── file3.py
并且您希望程序自动获取位于此 subdirectory
中的每个模块并以特定方式处理它,您可以按如下方式实现:
import glob
# Get file paths of all modules.
modules = glob.glob('subdirectory/*.py')
# Dynamically load those modules here.
有关如何动态加载模块的信息,请参阅 this question。
在您的 subdirectory/__init__.py
中,您可以通过以下方式导入所有本地模块:
from . import file1
from . import file2
# And so on.
您可以通过
导入本地模块的内容from .file1 import *
# And so on.
然后您可以通过
导入这些模块(或内容)from subdirectory import *
使用 __init__.py
中的属性 __all__
,您可以控制在 from ... import *
语句中导入的内容。因此,如果您不想导入 file2.py
,例如您可以这样做:
__all__ = ['file1', 'file3', ...]
您可以通过
访问这些模块import subdirectory
from subdirectory import *
for name in subdirectory.__all__:
module = locals()[name]
您的 __init__.py
文件应如下所示:
from file1 import *
from file2 import *
然后你可以做:
from subdirectory import *
在尝试了一些不同的解决方案后找到了这个方法(如果您在相邻目录中有一个名为 'folder' 的文件夹):
for entry in os.scandir('folder'):
if entry.is_file():
string = f'from folder import {entry.name}'[:-3]
exec (string)