How to implement automatic import of packages in python

王林
Release: 2023-05-09 15:25:14
forward
1307 people have browsed it

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

def auto_import(packagePath: str, fileTag: str, interceptLength: int, level=1):
    """
    自动导入函数,导入具有某个标识的文件
    :param packagePath: 当前包路径
    :param level: 软件包层级
    :param fileTag:文件名称标识
    :param interceptLength:导入属性截取名称
    :return:
    """
    # 定义导入属性列表和包
    att_list = []
    # 获取对应的包层级
    rank = level
    package = ''
    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
Copy after login

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

import os
import auto_import


def 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__}校验完成!    ####")
Copy after login

The above is the detailed content of How to implement automatic import of packages in python. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!