一、程序模块化

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

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

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

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. element-ui表单验证(电话,邮箱)

    element-ui Form表单验证 最近刚好使用了element-ui的form表单,官网只提供的示例,这里把一些常用的验证记录下来,方便后期查找最终的效果是这样的, 这个表单里还加入了一下其他组 ...

  2. "i++"和“++i”的区别

    测试: #include <iostream> using namespace std; int main(){ int i =0; cout << "初始化 i = ...

  3. Rails UVA - 514(栈)

    题目链接:https://vjudge.net/problem/UVA-514 题目大意:右边的火车经过中间的收费站到左边,右边火车进站的秩序是1~n   判断是否能以题中是所给的次序通过 思路:很明 ...

  4. mysql中添加中文存储和显示功能

    1. 在 /etc/mysql/my.cnf中添加 [mysqld]character-set-server=utf8 [client]default-character-set=utf8 2. 检查 ...

  5. stm32 外部中断学习

    今天我们看看STM32的外部中断实验. STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么把 16 个中断线和 IO 口一 ...

  6. php锁定文本框内容的方法

    有时候我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如<input type="text" name="zg" value="中国& ...

  7. Junit使用过程中需要注意的诡异bug以及处理办法

    在开发过程中我们有时会遇到狠多的问题和bug,对于在编译和运行过程中出现的问题很好解决,因为可以在错误日志中得到一定的错误提示信息,从而可以找到一些对应的解决办法.但是有时也会遇到一些比较诡异的问题和 ...

  8. CentOS7 安装oracle 客户端

    参考 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html   下载 oracle-instantclient11. ...

  9. 斗鱼扩展--notifications提示(十二)

    来说下 桌面通知 Notification,HTML5支持 Web Notifications 的实例,但是要经过用户允许,  chrome://settings/content/notificati ...

  10. lnmp架构-负载均衡

    一.几个基本概念 1.pv 值 pv 值(page views):页面的浏览量 概念:一个网站的所有页面,在一天内,被浏览的总次数.(大型网站通常是上千万的级别) 2.uv值 uv值(unique v ...