python自动导入包

Posted 阿福不是狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 = 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

假如我们创建了多个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__校验完成!    ####")

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

python项目1:自动解压并删除压缩包

目的:实现压缩包的自动解压及删除。

思路:获取压缩包 > 解压 > 删除压缩包

代码实现:此处代码实现前提为.py文件和压缩包在同一文件夹

# 导入需要的包
import os
import shutil
import time

# 定义查找函数
def scan_file():
    files = os.listdir()
    for f in files:
        if f.endswith(.zip):
            return f

# 定义解压函数
def unzip_it(f):
    folder_name = f.split(.)[0]
    target_path = ./ + folder_name
    os.makedirs(target_path)
    shutil.unpack_archive(f, target_path)

# 定义删除函数
def delete_file(f):
    os.remove(f)

# 让代码持续运行,一旦发现压缩包及时进行相关操作。
while True:
    zip_file = scan_file()
    if zip_file:
        unzip_it(zip_file)
        delete_file(zip_file)
    time.sleep(1) # 延时函数,减少内存占用,避免卡顿

结果:.zip文件一旦出现,则立刻被解压并删除

 

以上是关于python自动导入包的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure 自动化 Runbook 中安装和导入 Python 包

python模块与包的导入

python已安装了一个包,但是导入包中的模块时报错没有这个包

Python_9 py文件导入和路径处理

自动化 Python 包发布过程

python项目1:自动解压并删除压缩包