前提
    了解正则基本语法
 

 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 用正则处理日志实例的更多相关文章

  1. python中的第三方日志模块logging

    基本上每个系统都有自己的日志系统,可以使自己写的,也可以是第三方的.下面来简单介绍一下python中第三方的日志模块,入手还是比较简单的,但是也很容易给自己埋雷. 下面是我参考的资料链接 入手demo ...

  2. 使用python脚本实现统计日志文件中的ip访问次数

    使用python脚本实现统计日志文件中的ip访问次数,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下 适用的日志格式: 106.45.185.214 - - [06/Aug/2014: ...

  3. 转:python常用运维脚本实例

    python常用运维脚本实例 转载  file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函 ...

  4. python常用运维脚本实例【转】

    file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 . 首先 ...

  5. python+requests接口自动化测试框架实例详解

    python+requests接口自动化测试框架实例详解   转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...

  6. python迭代器与iter()函数实例教程

    python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...

  7. python中的类和实例

    今天花了两个多小时后搜索相关博客看了看python中有关类和实例的介绍,差不多大概明白了. python中的类和c++中的类是一样的,不同之处就是c++的类,如果含有成员变量,并且成员变量发生变化后, ...

  8. python学习_数据处理编程实例(二)

    在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...

  9. Python进阶:函数式编程实例(附代码)

    Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...

随机推荐

  1. VS2013创建ASP.NET应用程序描述

    你的 ASP.NET 应用程序 恭喜! 你已创建了一个项目 此应用程序包含: 显示“主页”.“关于”和“联系方式”之间的基本导航的示例页 使用 Bootstrap 进行主题定位 身份验证,如果选择此项 ...

  2. ptmalloc内存分配释放

    出处 分配: 1)获取分配区的锁,为了防止多个线程同时访问同一个分配区,在进行分配之前需要取得分配区域的锁.线程先查看线程私有实例中是否已经存在一个分配区,如果存在尝试对该分配区加锁,如果加锁成功,使 ...

  3. 【原创】大叔经验分享(49)hue访问hdfs报错/hue访问oozie editor页面卡住

    hue中使用hue用户(hue admin)访问hdfs报错: Cannot access: /. Note: you are a Hue admin but not a HDFS superuser ...

  4. starting Tomcat v8.5 at localhost has encountered a problem

    好像有很多初学者会遇到这个问题 我也遇到这个问题了, 我的问题在于:

  5. face++ php

    总流程是先上传文件,保存到后台,获取返回来的face_token保存下来,然后拿face_token添加到faceSet里面去,搜索的时候结果会返回faceSet里面的face_token 1.dem ...

  6. web.xml中DispatcherServlet拦截器的配置详情

    <welcome-file-list>    <welcome-file>index.jsp</welcome-file>    <welcome-file& ...

  7. .net core读取json配置文件

    一.新建.net core控制台程序 二.通过Nuget引入 Microsoft.Extensions.Configuration和microsoft.extensions.configuration ...

  8. 集腋成裘-12-git使用-01创建库

    一.git安装教程 git安装比较简单,选择好安装路径,直接默认下一步即可 1:检查git是否安装成功 二.SourceTree工具 1:下载&安装 安装过程中如何免注册? 在C:\Users ...

  9. 学习笔记: AOP面向切面编程和C#多种实现

    AOP:面向切面编程   编程思想 OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统      类--砖头     系统--房子      类--细胞     系统--人    ...

  10. Explanation About Initilizing A DirextX3D Class 关于初始化Direct3D类的解释

    目录 DirectX11 Study Note Create a DirectX graphics interface factory.创建一个DirectX图形界面工厂 CreateDXGIFact ...