> 文章列表 > python自动导入包

python自动导入包

python自动导入包

python自动导入包

问题描述: 代码编写过程中,需要引入文件,但是引入的文件随着项目的变大会变多,所以编写了一个自动导入的方法,会根据文件名称的特点进行导入。

def auto_import(packagePath: str, fileTag: str, interceptLength: int, level=1):"""自动导入函数,导入具有某个标识的文件:param packagePath: 当前包路径:param level: 软件包层级:param fileTag:文件名称标识:param interceptLength:导入属性截取名称:return:"""# 定义导入属性列表和包att_list = []# 获取对应的包层级rank = levelpackage = ''for i in range(level):# 获取父级包名称拼接包名称package += packagePath.split('\\\\')[-rank] + '.'rank -= 1# 遍历当前包下的所有文件for fileName in os.listdir(packagePath):# 筛选出nameTag的文件进行导入if fileTag in fileName:print(f'导入包名称:{package}' + fileName[:-3])# 动态导入包,并获取包内的具体模块、属性att_list.append(# 导入包中的某个属性importlib.import_module(# 拼接模块路径f'{package}' + fileName[:-3]# 获取模块中的对应属性).__dict__[fileName[:-interceptLength]])# 返回属性列表return att_list

假如我们创建了多个TableModel文件,需要校验对应的文件是否在数据库中存在,那么我们就可以这么用:

import os
import auto_importdef auto_check_model():"""导入tableModel中的所有文件,验证数据库中表是否存在:return: 返回验证结果"""# 获取当前文件夹路径packagePath = os.path.dirname(os.path.realpath(__file__))# 获取所有model文件model_list = auto_import(packagePath=packagePath, fileTag='Model',  interceptLength=8, level=2)# 建立数据库连接connect = DatabaseOperation().connect()# 检查model在数据库中是否存在,不存在则创建for i in range(len(model_list)):model_list[i].metadata.create_all(connect)print(f"#     {model_list[i].__name__}校验完成!    #")

代码注释没有说清楚的,欢迎在评论区指出~