zoukankan      html  css  js  c++  java
  • Python-程序模块化

    一、程序模块化

    一个程序可能需要导入自己写的模块,或者需要导入、查找、修改文件等操作。当把程序移植到其他路径执行时,会因为模块或文件路径的变化而报错。

    程序模块化,就是将整个程序(包含该程序需要用到的所有函数、变量、文件、模块等)当做一个整体。只要整个程序内部的相对路径不改变,将程序移植到其他路径执行,也不会报错。

    二、程序(实现一个功能)的基本结构

    1、findkeys实现的功能:在日志中查找error和exception,并将对应的文件名、行数、内容写到日志文件中
    
    2、bin目录:包含可执行程序
    
    3、conf目录:配置文件,配置该程序需要用到的所有数据及路径
    
    4、data目录:包含该程序需要用到的所有数据
    
    5、lib目录:包含可执行程序需要调用的所有方法
    
    6、log目录:保存结果日志文件
    
    7、README.MD:程序说明

    三、配置环境变量

    1、conf目录下的setting.py,定义全局变量。将base_path加入临时环境变量,当base_path的路径(findkeys目录)发生变化时,也能正确获取到DATAPATH和LOGPATH

    import os, sys
    base_path =os.path.dirname(os.path.dirname(__file__)) #base_path定位到findkeys这一层
    sys.path.insert(0,base_path)                          #将根目录findkeys加入环境变量
    DATAPATH = os.path.join(base_path,'data')             #DATAPATH获取数据的保存路径
    LOGPATH = os.path.join(base_path,r'log/log.log')      #LOGPATH获取日志文件路径

    2、seach.py:遍历DATAPATH下的所有文件的每一行;当文件中存在error或exception时,记录该文件名,行数和该行的所有内容

    import os
    def search(datapath, logpath):
        with open(logpath,'w',encoding='utf-8')as f1:
            files = os.listdir(datapath)#获取datapath下的所有文件,保存在list中
            for file in files:          #遍历每一个文件
                filepath = os.path.join(datapath,file) #获取文件的绝对路径
                with open(filepath, 'r') as f2:
                    n = 1   #保存当前读取的行数;读取一行,n+1
                    for line in f2:
                        if 'error' in line or 'exception' in line:
                            f1.write('文件名:%s  第%d行  内容:%s' %(file, n, line))
                    n += 1

    3、searchkeys.py:调用search.py,传入DATAPATH和LOGPATH

    import sys, os
    base_path = os.path.dirname(os.path.dirname(__file__))
    sys.path.insert(0,base_path)      #将当前文件的父目录的父目录findkeys加入临时环境变量
    from conf.setting import DATAPATH #导入DATAPATH
    from conf.setting import LOGPATH  #导入LOGPATH
    from lib.search import search     #导入search()
    
    if __name__ == '__main__':
        search(DATAPATH, LOGPATH)
  • 相关阅读:
    OpenCV运动检测跟踪(blob track)框架组成模块详解
    C# 控制台应用程序中输出彩色字体
    C#获取隐藏的文件
    用c#怎么比较两张图片的不同
    清除浏览器缓存
    C#判断系统是否已经连接上网络
    如何删除VS2005中显示的最近项目
    设计模式:模板方法模式(Template Method)
    【SQL】数据库对象中查找某一关键字
    【问答】.NET面试题
  • 原文地址:https://www.cnblogs.com/jessicaxu/p/7761335.html
Copyright © 2011-2022 走看看