一、程序模块化

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

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

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

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. Vue.js-----轻量高效的MVVM框架(二、Vue.js的简单入门)

    1.hello vue.js! (1)引入vue.js <script type="text/javascript" src="js/vue.js"> ...

  2. grunt 合并压缩js和css文件(二)

    具体node及文件配置请看: grunt 安装使用(一) 要压缩的文件 --src/ ajax.js assets.js touch.js zepto.js 目录结构: dist/ node_modu ...

  3. Jquery ValidationEngine 修改验证提示框的位置

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Unity3d C# 创建 物体

    using UnityEngine; using System.Collections; public class create : MonoBehaviour { // Use this for i ...

  5. Redis Intro - Skiplist

    http://zhangtielei.com/posts/blog-redis-skiplist.html https://juejin.im/entry/59197a390ce4630069fbcf ...

  6. PHP会话管理

    Session使用 在每个页面中使用session之前,必须使用session_start() 在每个session中都可以使用$_SESSION这个全局数组,在页面必须调用session_start ...

  7. 摄像机模型 (Camera Model)

    摄像机通过成像透镜将三维场景投影到摄像机二维像平面上,这个投影可用成像变换描述,即摄像机成像模型.摄像机成像模型有不同描述方式,本节首先介绍机器视觉中的常用坐标系,然后介绍摄像机的线性模型和非线性模型 ...

  8. Murano Weekly Meeting 2016.06.14

    Meeting time: 2016.June.14 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: 1. ...

  9. apache配置多端口对应多个虚拟目录

    经常需要在本地调试网站,却又不喜欢在http://localhost/网站的文件夹名 且几个比较重要的项目我想直接用端口号以示区分,想达到的效果如下: http://localhost/ 默认80端口 ...

  10. HDU 4364——Matrix operation——————【模拟题】

    Matrix operation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...