1.如果同一个ip地址60s之内访问超过200次,那么就把ip加入黑名单

需求分析:

1.60s读一次文件

2.分割,取第一个元素,ip地址

3.把所有ip加入到一个list里面,如果ip次数超过200次加入黑名单

import time

point = 0 # 文件指针

while True:

blk_set = set() # 定义空集合,存放需要加入黑名单的ip

ips = [] # 存放所有ip地址

with open('access.log') as f:

f.seek(point)

for line in f:

ip = line.split()[0]

ips.append(ip)

if ips.count(ip) > 200:

blk_set.add(ip)

for ip in blk_set: # 去重

print('已把%s加入黑名单' % ip)

point = f.tell()

time.sleep(60)

2.判断是否为小数

# 小数点的个数,小数点的个数是否等于1

# 按照小数点分割

def check_float(s):

s = str(s)

if s.count('.') == 1:

s_list = s.split('.')

# 1.2 [1, 2]

# -5.3 [-5, 4]

left = s_list[0]

right = s_list[1]

if left.isdigit() and right.isdigit(): # 正小数

return True

elif left.startswith('-') and left.count('-') == 1: # 负小数

if left.split('-')[-1].isdigit() and right.isdigit():

return True

return False

3.对比字典内容

dict1 = {

"version": "9.0.0",

"is_test": True,

"store": "",

"urs": "",

"device": {

"os": "android",

"ime1": "99001062198893",

"device_id": "CQliMWEyYTEzNTYyYzk5MzJmCTJlNmY3Zjkx",

"mac": "02:00:00:00:00:00",

"galaxy_tag": "CQliMWEyYTEzNTYyYzk5MzJmCTJlNmY3Zjkx",

"udid": "a34b1f67dd5797df93fdd8b072f1fb8110fd0db6",

"network_status": "wifi"

},

"adunit": {

"category": "VIDEO",

"location": "1",

"app": "7A16FBB6",

"blacklist": ""

},

"ext_param": {

"is_start": 0,

"vId": "VW0BRMTEV"

}

}

dict2 = {

"version": "9.0.0",

"is_test": True,

"urs": "",

"store": "",

"device": {

"os": "android",

"imei": "99001062298893",

"device_id": "CQliMWEyYTEzNTYyYzk5MzJmCTJlNmY3Zjkx",

"mac": "02:00:00:00:00:00",

"galaxy_tag": "CQliMWEyYTEzNTYyYzk5MzJmCTJlNmY3Zjkx",

"udid": "a34b1f67dd5797da93fdd8b072f1fb8110fd0db6",

"network_status": "wifi"

},

"adunit": {

"category": "VIDEO",

"location": "1",

"app": "7A16FBB6",

"blacklist": ""

}, "ext_param": {

"is_start": 0,

"vid": "VW0BRMTEV"

}

}

# 判断两个字典里面不一样的key,value

# 只需判断d1里面有

# 循环d1,通过key去d2里面取值

# 判断通过key取到的类型是什么,如果是字典的话,继续循环

# 然后再判断key和value

def compare(d1, d2):

for key in d1:

value1 = d1.get(key)

value2 = d2.get(key, '不存在')

if type(value1) == dict:

compare(value1, value2)

else:

if value1 != value2 and value2 == '不存在':

print('value不一样的key:%s,value1:%s,value2:%s' % (key, value1, value2))

res = set(d1.keys()).symmetric_difference(set(d2.keys())) # 对称差集,两个字典里面不一样的key

if res:

print('key不一样的是', ','.join(res))

compare(dict1, dict2)

Python 小练习一的更多相关文章

  1. Python小工具--删除svn文件

    有的时候我们需要删除项目下的svn相关文件,但是SVN会在所有的目录下都创建隐藏文件.svn,手工一个个目录查找然后删除显然比较麻烦.所以这里提供了一个Python小工具用于批量删除svn的相关文件: ...

  2. python小练习(自己瞎倒腾)

    python小练习 在网上无意中看到一个问题,心血来潮写了写,觉得比较有意思,以后遇到这种有意思的小练习也记录下. #!/usr/bin/env python # -*- coding:utf-8 - ...

  3. python小练习之二

    title: python小练习之二 tags: 新建,模板,小书匠 grammar_cjkRuby: true --- python小练习之二 需求:实现用户登录,用户名和密码保存到文件里,连续输入 ...

  4. Python小代码_2_格式化输出

    Python小代码_2_格式化输出 name = input("name:") age = input("age:") job = input("jo ...

  5. Python小代码_1_九九乘法表

    Python小代码_1_九九乘法表 max_num = 9 row = 1 while row <= max_num: col = 1 while col <= row: print(st ...

  6. python小练习---TCP服务器端

    针对于上一篇分享python小练习---TCP客户端 http://www.cnblogs.com/zhaijiahui/p/6926197.html我继续按书中内容,向下进行这里需要强调一个事py3 ...

  7. python小练习:使用循环和函数实现一个摇骰子小游戏。游戏规则如下:游戏开始,首先玩家选择Big or Small(押大小),选择完成后开始摇三个骰子,计算总值,11<=总值<=18为“大”,3<=总值<=10为“小”。然后告诉玩家猜对或者是猜错的结果。

    python小练习:使用循环和函数实现一个摇骰子小游戏.游戏规则如下:游戏开始,首先玩家选择Big or Small(押大小),选择完成后开始摇三个骰子,计算总值,11<=总值<=18为“ ...

  8. python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名。

    python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名. 使用for循环即可实现: for name in range(1,11): desktop_path='C: ...

  9. python小工具myqr生成动态二维码

    python小工具myqr生成动态二维码 (一)安装 (二)使用 (一)安装 命令: pip install myqr 安装完成后,就可以在命令行中输入 myqr 查看下使用帮助: myqr --he ...

  10. Python小数据池,代码块

    今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. ...

随机推荐

  1. L142

    keep half an eye on something分神留意splash out随意花钱 大肆挥霍half a mind有想做某事go Dutch v. 各自付帐,打平伙chance in a ...

  2. 【python】numpy pandas 特性(随时更新)

    [value map] 用df.replace(dict)可以解决.但是如果dict太大,会非常非常慢. [array相加的维度规律][广播] (2,3) 能和 (3,) 相加,不能和(2,)相加 ( ...

  3. PostgreSQL copy 时提示:ERROR: invalid byte sequence for encoding "UTF8": 0xb3

    测试时使用三种文件格式: ISO-8859 Netpbm PBM image ASCII if [ $(file $filename|grep -c "ISO-8859") -gt ...

  4. jgit - java实现git操作

    在做一个项目中需要用到远程仓库,本来想使用svn的,但是svn的java api网上的资料很少,而且与git相比,svn显得笨重且不方便,因此放弃了svn转而使用git.java git api - ...

  5. Drools7在Intellij IDEA下的引入静态方法错误提示

    问题 在Intellij IDEA 2016下,默认安装了Drools的插件,但使用Drools7(其他版本应该也有问题)时发现,在DRL文件中引入的静态方法IDEA会提示"Cannot r ...

  6. GeoWebCache的配置与使用

    最近在做一个开源GIS的demo的工作,工作中涉及到了地图瓦片,选取的开发环境是geoserver+openlayers,那么地图瓦片自然而然也就使用geowebcache,geowebcache就相 ...

  7. lzugis——Arcgis Server for JavaScript API之自定义InfoWindow

    各位看到这个标题不要嫌烦,因为本人最近一直在研究相关的问题,所以相关文章也只能是这些,同时希望看过我的文章的朋友,我的文章能够给你帮助. 在前面的两篇相关的文章里面,实现InfoWindow是通过di ...

  8. 如何突破JAVA程序员三年的门槛

    第一阶段:三年 我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人.这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本 上的内容迈向真正的企业级开发.我们知道如何团 ...

  9. phpcmsV9搜索分页数量

    phpcmsV9搜索结果自定义控制分页条数,具体方法: 打开搜索模型文件夹phpcms/modules/search/index.php, 找到第85行: $result = $this->db ...

  10. [python] 排序的动态展示

    两句闲话 本文所说的排序是指基于交换的排序.因此,按理来说,本文应该叫基于交换的排序的动态展示,但是这样太拗口了. 效果展示 最终效果如下. 实现方法 需要说明的是,在这里是通过pygame来实现图形 ...