一、程序模块化

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

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

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

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)

Python-程序模块化的更多相关文章

  1. Python程序的常见错误(收集篇)

    关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Applicatio ...

  2. 浅谈 Python 程序和 C 程序的整合

    源地址:http://www.ibm.com/developerworks/cn/linux/l-cn-pythonandc/ 概览 Python 是一种用于快速开发软件的编程语言,它的语法比较简单, ...

  3. Python程序员的10个常见错误(转)

    add by zhj:虽然学Python也有两年了,但这些问题的确容易犯,看来对Python的理解还有些地方不深入.先转了,有时间再好好看 译文:http://blog.jobbole.com/682 ...

  4. 谈 Python 程序和 C 程序的整合 (转载)

    http://www.ibm.com/developerworks/cn/linux/l-cn-pythonandc/ 概览 Python 是一种用于快速开发软件的编程语言,它的语法比较简单,易于掌握 ...

  5. Python程序员的10个常见错误

    关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Applicatio ...

  6. Python包模块化调用方式详解

    Python包模块化调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一般来说,编程语言中,库.包.模块是同一种概念,是代码组织方式. Python中只有一种模块对象类型 ...

  7. 运行python程序

    1 在windows下运行python程序 1)从DOS命令行运行python脚本 用python解释器来执行python脚本,在windows下面python解释器是python.exe,我的pyt ...

  8. 【python之路2】CMD中执行python程序中文显示乱码

    在IDLE中执行下面代码,中文显示正常: # -*- coding:utf-8 -*- st=raw_input("请输入内容")print st 但在CMD中执行e:\hello ...

  9. Python程序高效地调试

    现在我在debug python程序就只是简单在有可能错误的地方print出来看一下,不知道python有没像c++的一些IDE一样有单步调试这类的工具?或者说各位python大神一般是怎么debug ...

  10. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

随机推荐

  1. mysql查询过去12个月的数据统计

    SELECT DATE_FORMAT( FROM_UNIXTIME( t.`created_at`, '%Y-%m-%d %H:%i:%S' ), '%Y-%m' ) MONTH, count(t.c ...

  2. 性能测试工具Jmeter02-安装配置

    安装配置 1.安装配置jdk 2.Jmeter下载地址:http://mirror.bit.edu.cn/apache/jmeter/binaries/ 下载后,解压文件到任意目录,避免在一个有空格的 ...

  3. OpenStack概念

    OpenStack is a global collaboration ofdevelopers and cloud computing technologists producing the ubi ...

  4. (转) IP子网划分

    原文:http://blog.csdn.net/birdie_l/article/details/77994610  子网划分公式计算法 实例一 实例二 心算思路总结: B类公式算法举例: 总结:此表 ...

  5. ajax多次请求的一个效果思路

    首先页面加载时候显示遮罩层 jQuery(function() { show_dialog(); //tianxie(); }); 定义一个全局数组,用于存放问题id var qar = []; 循环 ...

  6. spring mvc 与Struts的认识

    首先,纠正一个概念上的错误.ssh一般意义上是指 struts,spring framework以及hibernate.这三个框架作用是不一样的.hibernate主要是用于持久层,struts主要是 ...

  7. jquery常用属性与方法

    1..css( )给指定的样式设置样式值: 2..attr(attributeName,value) /.removeAttr(attributeName);给指定的属性设置值 / 清除所有匹配的元素 ...

  8. 5.1 Linux(8)

    2019-5-1 21:37:20 嗓子前天回来上火,现在不疼了就是有点痒痒! 多喝热水 今天老师讲的如何发布项目,其实就是配置一下自己的uwsgi和  Nginx  配置一下 其他的不难 笔记很详细 ...

  9. Java 中的四种引用

    1.强引用(Strong Reference)在 Java 中四种引用中是“最强”的,我们平时通过 new 关键字创建的对象都属于强引用,如下面的代码: Person person = new Per ...

  10. 选择、循环与函数结构:MATLAB VS Python

    选择.循环与函数结构:MATLAB VS Python 整理基本的程序控制结构,主要是选择 和 循环. 1.MATLAB选择结构 (1)单分支if语句格式: if 条件 语句组 end (2)双分支i ...