python简单日志统计
业务场景:在一个目录里,有许多日志文件,里面是一条条的json数据,格式如下,为防止一个账号被多个ip使用,现在我想知道:哪些用户登录了哪些ip,和哪些ip登录了哪些用户,如果一个ip对应一个用户,就不展示了


import json, os, sys
ip_map = {}
email_map = {}
path = 'E:/GoogleDownload/' #日志路径
type = # :countByIp :countByEmail
def countByIp(line):
try:
if line['ip'] in ip_map.keys():
ip_v_map = ip_map[line['ip']]
if line['email'] in ip_v_map.keys():
new_email_count = ip_v_map[line['email']] +
ip_v_map[line['email']] = new_email_count
else:
ip_v_map[line['email']] =
ip_map[line['ip']] = ip_v_map
else:
ip_v_map = {}
ip_v_map[line['email']] =
ip_map[line['ip']] = ip_v_map
except:
print("countByIp error: %s"%line)
def countByEmail(line):
try:
if line['email'] in email_map.keys():
email_v_map = email_map[line['email']]
if line['ip'] in email_v_map.keys():
new_ip_count = email_v_map[line['ip']] +
email_v_map[line['ip']] = new_ip_count
else:
email_v_map[line['ip']] =
email_map[line['email']] = email_v_map
else:
email_v_map = {}
email_v_map[line['ip']] =
email_map[line['email']] = email_v_map
except:
print("countByEmail error: %s"%line)
def getResult(file, type):
fr = open(path+file, "r")
line = fr.readline()
line = json.loads(line)
if type == :
countByIp(line)
elif type == :
countByEmail(line)
else:
return
i =
while line:
line = fr.readline()
if line == "" or line is None:
continue
i +=
line = json.loads(line[:-])
if type == :
countByIp(line)
elif type == :
countByEmail(line)
else:
return
print("读取%s, 行数:%s"%(file,i))
fr.close()
if __name__ == "__main__":
for f in os.listdir(path):
if os.path.isfile(os.path.join(path, f)) and str(f).endswith('.log'):
getResult(str(f), type)
fw_ip = open(path + "result_ip.txt", "w")
fw_email = open(path + "result_email.txt", "w")
for ip in list(ip_map):
if == len(ip_map[ip]):
ip_map.pop(ip)
for ip in list(email_map):
if == len(email_map[ip]):
email_map.pop(ip)
fw_ip.write(str(ip_map))
fw_email.write(str(email_map))
fw_ip.close()
fw_email.close()
最后,结果如下
当前ip被哪些用户登录了多少次

当前用户在哪些ip上登录过多少次

python简单日志统计的更多相关文章
- python简单日志处理
简单日志处理 import datetime import re logfile='''58.61.164.141 - - [22/Feb/2010:09:51:46 +0800] "GET ...
- python简单词频统计
任务 简单统计一个小说中哪些个汉字出现的频率最高 知识点 文件操作 字典 排序 lambda 代码 import codecs import matplotlib.pyplot as plt from ...
- python 简单日志框架 自定义logger
转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 通常我们在构建 python 系统时,往往需要一个简单的 logging 框架.python 自 ...
- 使用python脚本实现统计日志文件中的ip访问次数
使用python脚本实现统计日志文件中的ip访问次数,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下 适用的日志格式: 106.45.185.214 - - [06/Aug/2014: ...
- Python基础-使用range创建数字列表以及简单的统计计算和列表解析
1.使用函数 range() numbers = list(range[1,6]) print (numbers) 结果: [1,2,3,4,5] 使用range函数,还可以指定步长,例如,打印1~1 ...
- python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图
python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...
- python制作简单excel统计报表2之操作excel的模块openpyxl简单用法
python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...
- Kafka实战-实时日志统计流程
1.概述 在<Kafka实战-简单示例>一文中给大家介绍来Kafka的简单示例,演示了如何编写Kafka的代码去生产数据和消费数据,今天给大家介绍如何去整合一个完整的项目,本篇博客我打算为 ...
- 【转】Python之日志处理(logging模块)
[转]Python之日志处理(logging模块) 本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging ...
随机推荐
- Java基础知识---continue
一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名为Java: ...
- 在VMware中使用Nat方式设置静态IP
为了在公司和家中不改变ip,所以采用vm的NAT模式来设置静态ip 1.vm采用NAT模式联网 2.编辑vm虚拟机设置 3.查看该网段的网关 可以看出网关为192.168.44.2,然后开始设置静态i ...
- 20145309《Java程序设计》第八周学习总结
日志 •java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logger类,Logger类的构造函数标示为protected,不是java.util.logging同包的类 ...
- 20145313张雪纯 《Java程序设计》第7周学习总结
20145313张雪纯 <Java程序设计>7周学习总结 教材学习内容总结 1967年定义的国际原子时,将秒的国际单位定义为铯原子辐射振动9192631170周耗费的时间. 为了简化日后对 ...
- this 的理解
function foo(num){ console.log("foo:",+num); this.count++}foo.count =0for (var i=0; i<1 ...
- linux下安装sphinx
1.下载sphinx源码包 上面截图的这个网址 复制链接地址 在putty终端使用:wget http://sphinxsearch.com/files/sphinx-2.3.1-beta.t ...
- vue.js的一些小语法v-for,v-text,v-html,v-on:click
1.Vue的目录结构: ======================================================================================== ...
- ElasticSearch集群故障案例分析: 警惕通配符查询
最近ElasticSearch集群出现了 https://elasticsearch.cn/article/171 文章中描述的情况,现在转载全文警示下自己. 许多有RDBMS/SQL背景的开发者,在 ...
- 在centos 6.9下Protocol Buffers数据传输及存储协议的使用(python)
我们知道Protocol Buffers是Google定义的一种跨语言.跨平台.可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据 ...
- oracle sql - remove a user's all objects
DECLARE TYPE cst_table_list IS TABLE OF VARCHAR2(40); TYPE cst_list IS TABLE OF VARCHAR2(40); TYPE n ...