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)
Python-程序模块化的更多相关文章
- Python程序的常见错误(收集篇)
关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Applicatio ...
- 浅谈 Python 程序和 C 程序的整合
源地址:http://www.ibm.com/developerworks/cn/linux/l-cn-pythonandc/ 概览 Python 是一种用于快速开发软件的编程语言,它的语法比较简单, ...
- Python程序员的10个常见错误(转)
add by zhj:虽然学Python也有两年了,但这些问题的确容易犯,看来对Python的理解还有些地方不深入.先转了,有时间再好好看 译文:http://blog.jobbole.com/682 ...
- 谈 Python 程序和 C 程序的整合 (转载)
http://www.ibm.com/developerworks/cn/linux/l-cn-pythonandc/ 概览 Python 是一种用于快速开发软件的编程语言,它的语法比较简单,易于掌握 ...
- Python程序员的10个常见错误
关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Applicatio ...
- Python包模块化调用方式详解
Python包模块化调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一般来说,编程语言中,库.包.模块是同一种概念,是代码组织方式. Python中只有一种模块对象类型 ...
- 运行python程序
1 在windows下运行python程序 1)从DOS命令行运行python脚本 用python解释器来执行python脚本,在windows下面python解释器是python.exe,我的pyt ...
- 【python之路2】CMD中执行python程序中文显示乱码
在IDLE中执行下面代码,中文显示正常: # -*- coding:utf-8 -*- st=raw_input("请输入内容")print st 但在CMD中执行e:\hello ...
- Python程序高效地调试
现在我在debug python程序就只是简单在有可能错误的地方print出来看一下,不知道python有没像c++的一些IDE一样有单步调试这类的工具?或者说各位python大神一般是怎么debug ...
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
随机推荐
- element-ui表单验证(电话,邮箱)
element-ui Form表单验证 最近刚好使用了element-ui的form表单,官网只提供的示例,这里把一些常用的验证记录下来,方便后期查找最终的效果是这样的, 这个表单里还加入了一下其他组 ...
- "i++"和“++i”的区别
测试: #include <iostream> using namespace std; int main(){ int i =0; cout << "初始化 i = ...
- Rails UVA - 514(栈)
题目链接:https://vjudge.net/problem/UVA-514 题目大意:右边的火车经过中间的收费站到左边,右边火车进站的秩序是1~n 判断是否能以题中是所给的次序通过 思路:很明 ...
- mysql中添加中文存储和显示功能
1. 在 /etc/mysql/my.cnf中添加 [mysqld]character-set-server=utf8 [client]default-character-set=utf8 2. 检查 ...
- stm32 外部中断学习
今天我们看看STM32的外部中断实验. STM32 供 IO 口使用的中断线只有 16 个,但是 STM32 的 IO 口却远远不止 16 个,那么 STM32 是怎么把 16 个中断线和 IO 口一 ...
- php锁定文本框内容的方法
有时候我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如<input type="text" name="zg" value="中国& ...
- Junit使用过程中需要注意的诡异bug以及处理办法
在开发过程中我们有时会遇到狠多的问题和bug,对于在编译和运行过程中出现的问题很好解决,因为可以在错误日志中得到一定的错误提示信息,从而可以找到一些对应的解决办法.但是有时也会遇到一些比较诡异的问题和 ...
- CentOS7 安装oracle 客户端
参考 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html 下载 oracle-instantclient11. ...
- 斗鱼扩展--notifications提示(十二)
来说下 桌面通知 Notification,HTML5支持 Web Notifications 的实例,但是要经过用户允许, chrome://settings/content/notificati ...
- lnmp架构-负载均衡
一.几个基本概念 1.pv 值 pv 值(page views):页面的浏览量 概念:一个网站的所有页面,在一天内,被浏览的总次数.(大型网站通常是上千万的级别) 2.uv值 uv值(unique v ...