前提
    了解正则基本语法
 

 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. 第十三章:UNDO段

    一.UNDO UNDO 段是用于存储还原数据的特殊段,在发生实例故障的时候,UNDO 段用来对数 据进行恢复.本章内容包括介绍 UNDO 段的工作原理,并进行自动和手工的 UNDO 段的管理 1.1 ...

  2. Vue报错——“Trailing spaces not allowed”

    在VSCode中开发Vue 报错:“Trailing spaces not allowed” 这是空格多了,删除多余的空格就可以了

  3. Python3学习笔记十三

    1.   css 老师的博客:http://www.cnblogs.com/yuanchenqi/articles/6856399.html 选择器:找到想要改变的标签 css的功能:渲染和布局 2. ...

  4. A页面跳转到B页面后打开指定tabs标签

    A页面: <!DOCTYPE html><html lang="en" class="no-js">    <head>   ...

  5. 关于DataTable 判断 列名是否存在的方法中英文符合不区分?

    最近系统出现一个错误,排查了很久,发现判断DataTable 列名是否存在时,发现一个坑,居然不会区分中英文符合. 有谁知道其中的原理?先记录一下,免得以后忘记这个天坑. 一. 先初始化一个DataT ...

  6. Chrome插件触发web页面的事件

    Chrome插件中不能直接调用Web页面的元素js,原因是chrome插件的机制http://stackoverflow.com/questions/17819344/triggering-a-cli ...

  7. Win7共享文件夹简单?这个共享问题可以难倒90%的人

    信息化社会,没有哪个公司不用电脑办公了.一个办公室里面的同事相互之间利用系统的共享功能,共享一些文件和软件已经是司空见惯的了,这个不需要多么复杂的操作.我们使用最多的windows7操作系统就能很方便 ...

  8. org.json.JSONObject的getString和optString使用注意事项

    结论:org.json.JSONObject的getString如果取不到对应的key会抛出异常,optString则不会 /** * Returns the value mapped by {@co ...

  9. 对Inode、Hard Link以及Soft Link的理解

    一.EXT2/EXT3等文件系统的分区格式 Linux的文件系统从EXT2开始将文件的属性和文件的实际内容分开存储,文件的属性由inode存储,文件的内容由block存储. 系统在对磁盘进行分区格式化 ...

  10. DDD - 概述 - 聚合 - 限界上下文 (四)

    最重要的一句话 DDD的所有有相关理论中,只有一句是至关重要的,但是也是最容易被忽略和最难做到的,抛弃传统的设计方式(思路)的思想,这句话起了决定性的作用,但是99%的人都忽略了或者在开始无法正视或理 ...