确实感觉长见识了。

希望能坚持,并有多的时间用来分析这些思路和模式。

#!/usr/bin/python
import sys
import gzip
import bz2
from optparse import OptionParserclass LogProcessor(object):'''Process a combined log format.This processor handles log files in a combined format,objects that act on the results are passed in tothe init method as a series of methods.'''def __init__(self, call_chain=None):"""Setup parserSave the call chain. Each time we process a log ,we'll run the list of callbacks with the processedlog results."""if call_chain is None:call_chain = []self._call_chain = call_chaindef split(self, line):"""Split a log file.Initially,we just want size and requested file name . sowe'll split on spaces and pull the data out."""parts = line.split()return {'size': 0 if parts[9] == '-' else int(parts[9]),'file_requested': parts[6]}def parse(self, handle):"""Parses the log file.Returns a dictionary composed of log entry valuesfor easy data summation"""for line in handle:fields = self.split(line)for func in self._call_chain:func(fields)class ColumnLogProcessor(LogProcessor):def split(self, line):parts = line.split()return {'size': int(parts[1]),'file_requested': parts[0]}class MaxSizeHandler(object):"""Check a file's size."""def __init__(self, size):self.size = sizedef process(self, fields):"""Looks at each line individually.Looks at each parsed log line individually andperforms a size calculation. If it's bigger thanour self.size, we just print a warning."""if fields['size'] > self.size:#print ('Warning: %s exceeds $d bytes (%s) !' % (fields['file_requested'], str(self.size), fields['size']))print ('Warning: {0} exceeds {1} bytes {2} !'.format (fields['file_requested'], str(self.size), fields['size']))
def get_stream(path):"""Detect compression.If the file name ends in a compression suffix, we'll openusing the correct algorith. If not, we just return a standardfile object."""_open = openif path.endswith(',gz'):_open = gzip.openelif path.endswith('.bz2'):_open = bz2.open()return _open(path)
if __name__ == '__main__':parser = OptionParser()parser.add_option('-s', '--size', dest = "size",help = "Maximum File Size Allowed",default = 0, type = "int")parser.add_option('-f', '--file', dest = "file",help = "Path to Web Log File",default = "-")opts,args = parser.parse_args()call_chain = []if opts.file == '-':file_stream = sys.stdinelse:try:#file_stream = open(opts.file, 'r')file_stream = get_stream(opts.file)except IOError as e:print (sys.stderr,str(e))sys.exit(-1)size_check = MaxSizeHandler(opts.size)call_chain.append(size_check.process)processor = LogProcessor(call_chain)processor.parse(file_stream)#processorC = ColumnLogProcessor(call_chain)#processorC.parse(file_stream)

能分析压缩的日志,且基于文件输入的PYTHON代码实现相关推荐

  1. 脚本文件直接执行python代码

    脚本文件直接执行python代码

  2. Python提取.ipynb文件中的Python代码保存为.py文件

    封面图片:<Python程序设计基础(第2版)>,ISBN:9787302490562,董付国,清华大学出版社 配套资源:用书教师可以免费获取教学大纲.教案.课件.源码.习题答案.课堂管理 ...

  3. python 复制文件_10 行 Python 代码写 1 个 USB 病毒

    (给Python开发者加星标,提升Python技能) 转自: 知乎-DeepWeaver 昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有wind ...

  4. excel文件成绩处理python代码_Python处理Excel文件实例代码

    因为工作需求,需要审核一部分query内容是否有效,query储存在Excel中,文本内容为页面的Title,而页面的URL以HyperLink的格式关联到每个Cell. 于是本能的想到用Python ...

  5. 转化iRiver的歌词文件SNC到标准歌词文件lrc的python代码

    老婆学英语,下载了一些英语资料mp3,可以支持iRiver的mp3播放器显示歌词, 歌词是和mp3打包在一个mp3文件中. 到网上找了一个分离软件,分离出来的歌词格式是snc.我家的mp3不支持. 在 ...

  6. 搜索所有硬盘分区,并找到文件名含有关键词的文件,使用python代码实现

    在 Python 中,可以使用 os 模块中的 os.walk() 函数来搜索硬盘的所有分区.这个函数会遍历整个目录树,并返回一个三元组 (root, dirs, files),其中 root 是当前 ...

  7. ldf文件怎么储存到mysql中_sqlserver数据库的ldf文件太大,我们如何压缩ldf日志文件...

    使用sqlserver数据库的数据有两个文件,分别是mdf和ldf. mdf是数据文件,另外一个ldf为日志文件.随着网站的运行,你会发现ldf这个文件会越来越大,我们如何压缩ldf日志文件. 网上有 ...

  8. 嵌入式Linux系统编程学习之九基于文件描述符的文件操作

    文章目录 前言 一.文件描述符 二.打开.创建和关闭文件 三.读写文件 四.改变文件大小 五.文件定位 六.原子操作 七.进一步理解文件描述符 八.文件描述符的复制 九.文件的锁定 十.获取文件信息 ...

  9. 组件分享之后端组件——用于将日志写入滚动文件的组件包lumberjack

    组件分享之后端组件--用于将日志写入滚动文件的组件包lumberjack 背景 近期正在探索前端.后端.系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包 ...

  10. Java 压缩与解压zip文件

    一.压缩文件大致可以分为三种:ZIP.JAR.GZ. 压缩流 在日常中经常会使用到像WinRAR或WinZIP这样的压缩文件,通过这些软件可以把一个很大的文件进行压缩以方便传输. 在JAVA中,为了减 ...

最新文章

  1. LeetCode简单题之数组的相对排序
  2. Centos下 安装和测试kafka
  3. ElasticSearch 条件更新 删除
  4. python函数的目的与意义_Python函数的概念和使用
  5. kuangbin带我飞QAQ DLX之一脸懵逼
  6. Linux:让普通用户临时性获得root用户权限
  7. #Java编程题-百钱百鸡
  8. springMVC重复扫描bean导致声明式事务失效
  9. vue2.0 非父子组件之间的单一事件通信
  10. nginx做反向代理导致request.getServerName()获取不到代理地址的问题
  11. 【BZOJ4504】K个串 可持久化线段树+堆
  12. 设计模式系列 — 模板方法模式
  13. 导入JasperReports坐标时无法下载com.lowagie:itext:jar:2.1.7.js6
  14. 程序员面试题精选100题:51-63解题报告
  15. 界面控件DevExpress WinForms v21.2 - 全新升级的图表控件
  16. win10录屏_99%的人都忽略Windows自带的录屏软件,超好用!
  17. 惠普暗影2 pro ubuntu16.04安装nvidia显卡驱动
  18. 计网考点 无线局域网
  19. yolov5环境配置及训练coco128数据集
  20. Linux操作系统的性能将主要取决于,高校邦Linux操作系统安全与性能调优章节测试答案...

热门文章

  1. android编译make错误——javalib.jar invalid header field”、classes-full-debug.jar 错误 41 ...
  2. EntityFramework 元数据 设计分析
  3. 专家显身支招 教你如何选购高品质DDR2内存(例)
  4. Android P环境 bootchart使用
  5. 怎么把ui放入到java工程中_怎么把ui放入到java工程中
  6. Linux FrameBuffer分析
  7. linux-inject:注入代码到运行的Linux进程中
  8. freeswitch添加tls加密
  9. OpenCV中寻找轮廓函数cvFindContours的使用说明以及序列cvSeq的用法说明
  10. L1- 001——008