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 ...
随机推荐
- P5303 [GXOI/GZOI2019]逼死强迫症
题目地址:P5303 [GXOI/GZOI2019]逼死强迫症 这里是官方题解 初步分析 从题目和数据范围很容易看出来这是一个递推 + 矩阵快速幂,那么主要问题在于递推的过程. 满足条件的答案一定是以 ...
- 项目Alpha冲刺——代码规范、任务及计划
代码规范 JS规范 JS规范在线预览 PHP规范 PHP规范在线预览 Unity C#脚本规范 C#规范下载 任务计划 图表 计划进度燃尽表 网站部分任务计划 任务 时间 内容 第一天 4.24 阅读 ...
- Spring Cloud 2-Zuul 网关服务(六)
Spring Cloud Zuul 1.pom.xml 2.application.yml Application.java 1.pom.xml <!-- zuul 网关服务 --> ...
- 2018-2019-2-20175225 实验一 《Java开发环境的熟悉》实验报告
2018-2019-2-20175225 实验一 <Java开发环境的熟悉>实验报告 一.实验内容及知识点 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA编辑.编 ...
- pwnable.tw start&orw
emm,之前一直想做tw的pwnable苦于没有小飞机(,今天做了一下发现都是比较硬核的pwn题目,对于我这种刚入门?的菜鸡来说可能难度刚好(orz 1.start 比较简单的一个栈溢出,给出一个li ...
- Centos 7部署docker
master安装: 安装zookeeper -openjdk java--openjdk-headless rpm -i packages/mesosphere-zookeeper--.centos7 ...
- mysql 与 oracle 的连表update
mysql: update 表A a,表B b set a.xx=b.xx where a.id=b.id; oracle update 表A set a.xx=(select b.xx from 表 ...
- (转载)配置 Linux 操作系统的 JDK
系统Ubuntu,下载jdk-9.0.1 1,切换到root ,创建文件夹 xxxx@ubuntu:~$ sudo su root@ubuntu:~# mkdir /usr/java 2,找到下载 ...
- Linux 重定向 2>&1 , 1>&2
在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是: 0 是一个文件描述符,表示标准输入(stdin)1 是一个文件描述符,表示标准输出(stdout) ...
- 自己动手造拖拉机轮子系列 -(react-loadable)
最新消息:react官方已支持懒加载https://reactjs.org/docs/code-splitting.html#reactlazy 文章webpack分片chunk加载原理中深入探究了异 ...