业务场景:在一个目录里,有许多日志文件,里面是一条条的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简单日志统计的更多相关文章

  1. python简单日志处理

    简单日志处理 import datetime import re logfile='''58.61.164.141 - - [22/Feb/2010:09:51:46 +0800] "GET ...

  2. python简单词频统计

    任务 简单统计一个小说中哪些个汉字出现的频率最高 知识点 文件操作 字典 排序 lambda 代码 import codecs import matplotlib.pyplot as plt from ...

  3. python 简单日志框架 自定义logger

    转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 通常我们在构建 python 系统时,往往需要一个简单的 logging 框架.python 自 ...

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

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

  5. Python基础-使用range创建数字列表以及简单的统计计算和列表解析

    1.使用函数 range() numbers = list(range[1,6]) print (numbers) 结果: [1,2,3,4,5] 使用range函数,还可以指定步长,例如,打印1~1 ...

  6. python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...

  7. python制作简单excel统计报表2之操作excel的模块openpyxl简单用法

    python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...

  8. Kafka实战-实时日志统计流程

    1.概述 在<Kafka实战-简单示例>一文中给大家介绍来Kafka的简单示例,演示了如何编写Kafka的代码去生产数据和消费数据,今天给大家介绍如何去整合一个完整的项目,本篇博客我打算为 ...

  9. 【转】Python之日志处理(logging模块)

    [转]Python之日志处理(logging模块) 本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用logging ...

随机推荐

  1. windows安装git客户端

    1:线上git地址 https://github.com/ 2:tortoiseGit地址 http://tortoisegit.org 3:安装步骤 操作系统:Windows XP SP3 Git客 ...

  2. JAVA学习笔记之JAVA 对象引用以及赋值

      关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知道,在许多Java书中,把对象和对象的引用混为一谈.可是,如果我分不清对象与对象引用, 那实在没 ...

  3. 从toString()方法到Object.prototype.toString.call()方法

    一.toString方法和Object.prototype.toSting.call()的区别 var arr=[1,2]; 直接对一个数组调用toString()方法, console.log(ar ...

  4. Redis 数据结构-字符串源码分析

    相关文章 Redis 初探-安装与使用 Redis常用指令 本文将从以下几个部分进行介绍 1.前言 2.常用命令 3.字符串结构 4.字符串实现 5.命令是如果操作字符串的 前言 平时在使用 Redi ...

  5. 20145216史婧瑶《Java程序设计》第5周学习总结

    20145216 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 异常处理 8.1 语法与继承架构 Java中所有错误都会被打包为对象,运用try.catch,可以在错误发生 ...

  6. 20145327实验二Java面向对象程序设计

    Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 伪代码,产品代码,测试代码的应用 ...

  7. 最短路径 bellman-ford

    初始化:将除源点外的所有顶点的最短距离估计值 d[v] ←+∞, d[s] ←0 迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离:(运行|v ...

  8. ASP.NET OAuth Authorization - Difference between using ClientId and Secret and Username and Password

      What I don't fully understand is the use of ClientId and Secret vs Username and Password. The code ...

  9. UVA 1642 Magical GCD(经典gcd)

    题意:给你n(n<=100000)个正整数,求一个连续子序列使序列的所有元素的最大公约数与个数乘积最大 题解:我们知道一个原理就是对于n+1个数与n个数的最大公约数要么相等,要么减小并且减小至少 ...

  10. web服务器安全笔记

    一.设置项目目录权限(centos ,apache为例) 1.chown -R root /var/www/html/project   (设置项目所属的用户) 2.chgrp  -R root /v ...