python 用正则处理日志实例
import re
with open('top10_xiaozhuang_net.log','r') as f1: #读取日志文件 subject=f1.readlines()
with open('slice_log.log','w') as f2: #将切割结果存储到slice_log.log
for line in subject:
#line:
2019-04-15 00:00:00 192.168.254.253 info LinkProof: 14/04/2019 22:51:53 14/04/2019 22:52:48 114. 80.179.132 210. 29.144. 1 211.65.207.189 UDP 17224 53 0.0.0.0 OTHER 84,
14/04/2019 22:51:53 14/04/2019 22:52:48 120.221.144.117 210. 29.144. 1 211.65.207.189 UDP 38883 53 0.0.0.0 OTHER 80,
14/04/2019 22:51:53 14/04/2019 22:52:48 112. 47. 12.154 210. 29.144. 1 211.65.207.189 UDP 34323 53 0.0.0.0 OTHER 76,
#将log切块,使得结果成为结构统一的块
result = re.split(
#用问号和"...LinkProof"和","来切
r""".*LinkProof:\s+|\,
""",
line.strip('\n'), 0, re.VERBOSE) #result : ['', '14/04/2019 22:51:53 14/04/2019 22:52:48 120.221.145. 4 210. 29.144. 1 211.65.207.189 UDP 64777 53 0.0.0.0 OTHER 305','...',''] lenth = 9
#用切片去除头尾的空
for block in result[1:8]:
f2.write(block+'\n')
#将日期和时间分开取,正则表达式更简单,效率会更高
date1 = r"\S*" #反取,取不为空格的
time1 = r"\S*"
date2 = r"\S*"
time2 = r"\S*"
# time1 = r"\d{2}/\d{2}/\d{4}\s+(?:\d+\:){2}\d{2}" #取IP,因为存在IP里存在空格,所以用相对复杂的正则保证每次取到
ip1 = r"(?:\d{1,3}\.\s*){3}\d{1,3}"
ip2 = r"(?:\d{1,3}\.\s*){3}\d{1,3}"
ip3 = r"(?:\d{1,3}\.\s*){3}\d{1,3}"
protocal = r"\w{3}"
sizelike = r"\d*"
portlike = r"\d*"
ip4 = r"\S*"
type = r"\w*"
num = r"\d*"
#正则预编译
log_pattern = re.compile(r"(%s)\s+(%s)\s+(%s)\s+(%s)\s+(%s)\s+(%s)\s+(%s)\s+(%s)\s+(%s)\s+(%s)\s+(%s)\s+(%s)\s+(%s)" \
%(date1,time1,date2,time2,ip1,ip2,ip3,protocal,sizelike,portlike,ip4,type,num),re.VERBOSE)
l = []
with open('slice_log.log','r') as f2: #
lines = f2.readlines() for line in lines:
dic = {}
line_matchs = log_pattern.match(line)
if line_matchs != None:
all_groups = line_matchs.groups()
dic["date1"] = all_groups[0]+" "+all_groups[1]
dic["date2"] = all_groups[2]+" "+all_groups[3] #去掉IP里的空格
dic["ip1"] = all_groups[4].replace(" ","")
dic["ip2"] = all_groups[5].replace(" ","")
dic["ip3"] = all_groups[6].replace(" ","") dic["protocal"] = all_groups[7]
dic["sizelike"] = all_groups[8]
dic["portlike"] = all_groups[9]
dic["ip4"] = all_groups[10].replace(" ", "")
dic["type"] = all_groups[11]
dic["num"] = all_groups[12] l.append(dic)
# print((all_groups)) for item in l:
print(item)
python 用正则处理日志实例的更多相关文章
- python中的第三方日志模块logging
基本上每个系统都有自己的日志系统,可以使自己写的,也可以是第三方的.下面来简单介绍一下python中第三方的日志模块,入手还是比较简单的,但是也很容易给自己埋雷. 下面是我参考的资料链接 入手demo ...
- 使用python脚本实现统计日志文件中的ip访问次数
使用python脚本实现统计日志文件中的ip访问次数,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下 适用的日志格式: 106.45.185.214 - - [06/Aug/2014: ...
- 转:python常用运维脚本实例
python常用运维脚本实例 转载 file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函 ...
- python常用运维脚本实例【转】
file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 . 首先 ...
- python+requests接口自动化测试框架实例详解
python+requests接口自动化测试框架实例详解 转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...
- python迭代器与iter()函数实例教程
python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...
- python中的类和实例
今天花了两个多小时后搜索相关博客看了看python中有关类和实例的介绍,差不多大概明白了. python中的类和c++中的类是一样的,不同之处就是c++的类,如果含有成员变量,并且成员变量发生变化后, ...
- python学习_数据处理编程实例(二)
在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...
- Python进阶:函数式编程实例(附代码)
Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...
随机推荐
- Spring Cloud 2-Zuul 网关服务(六)
Spring Cloud Zuul 1.pom.xml 2.application.yml Application.java 1.pom.xml <!-- zuul 网关服务 --> ...
- 项目Alpha冲刺(团队)-第二天冲刺
格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:为了交项目干杯 作业目标:描述第二天冲刺的项目进展.问题困难.心得体会 ...
- session前后台交互
下面是需求需要,不同的人群进来显示不同,但是还必须是这个走到哪都的存在,不能说点击别的页面,下面红框处的数据就没有了,必须是存在的并且登陆的类型不一样,显示的也不一样,开始的时候想到的是直接调用方法, ...
- Android6.0以上系统动态获取权限
动态权限的申请方法: 1.首先,需要在AndroidManifest.xml静态申请权限,否则无法动态申请权限: <uses-permission android:name="andr ...
- jmeter获取请求信息和响应信息
String tmp = prev.getUrlAsString(); String tmp = prev.getRequestHeaders(); String tmp = prev.getResp ...
- MySQL/Oracle数据库优化总结
MySQL数据库优化的八种方式 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能 ...
- MYSQL水平拆分与垂直拆分
目前很多互联网系统都存在单表数据量过大的问题,这就降低了查询速度,影响了客户体验.为了提高查询速度,我们可以优化sql语句,优化表结构和索引,不过对那些百万级千万级的数据库表,即便是优化过后,查询速度 ...
- Linux版 php5.4 升级php7
开篇 本操作是在VirtualBox里面进行的,所以开篇先说下,本地如何操作VB里面的Linux 1.secureCRT登陆虚拟机ubuntu 直接连接虚拟机的ip (ifconfig)会提示拒绝访问 ...
- Service Fabric是什么?
题记:鉴于社区对Service Fabric有诸多误解,希望借本文能让大家正确了解Service Fabric是一个什么东西,算是给其正名. 术语与分类 Service Fabric不仅仅是容器编排器 ...
- iOS开发从申请开发账号到APP上架的整体流程详解
应公司要求,写一份文档从申请账号一直到APP上架的整体流程,下面进入正文. https://blog.csdn.net/qq_35612929/article/details/78754470 首先第 ...