Python 小练习一
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 小练习一的更多相关文章
- Python小工具--删除svn文件
有的时候我们需要删除项目下的svn相关文件,但是SVN会在所有的目录下都创建隐藏文件.svn,手工一个个目录查找然后删除显然比较麻烦.所以这里提供了一个Python小工具用于批量删除svn的相关文件: ...
- python小练习(自己瞎倒腾)
python小练习 在网上无意中看到一个问题,心血来潮写了写,觉得比较有意思,以后遇到这种有意思的小练习也记录下. #!/usr/bin/env python # -*- coding:utf-8 - ...
- python小练习之二
title: python小练习之二 tags: 新建,模板,小书匠 grammar_cjkRuby: true --- python小练习之二 需求:实现用户登录,用户名和密码保存到文件里,连续输入 ...
- Python小代码_2_格式化输出
Python小代码_2_格式化输出 name = input("name:") age = input("age:") job = input("jo ...
- Python小代码_1_九九乘法表
Python小代码_1_九九乘法表 max_num = 9 row = 1 while row <= max_num: col = 1 while col <= row: print(st ...
- python小练习---TCP服务器端
针对于上一篇分享python小练习---TCP客户端 http://www.cnblogs.com/zhaijiahui/p/6926197.html我继续按书中内容,向下进行这里需要强调一个事py3 ...
- python小练习:使用循环和函数实现一个摇骰子小游戏。游戏规则如下:游戏开始,首先玩家选择Big or Small(押大小),选择完成后开始摇三个骰子,计算总值,11<=总值<=18为“大”,3<=总值<=10为“小”。然后告诉玩家猜对或者是猜错的结果。
python小练习:使用循环和函数实现一个摇骰子小游戏.游戏规则如下:游戏开始,首先玩家选择Big or Small(押大小),选择完成后开始摇三个骰子,计算总值,11<=总值<=18为“ ...
- python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名。
python小练习1:设计这样一个函数,在桌面的文件夹上创建10个文本,以数字给它们命名. 使用for循环即可实现: for name in range(1,11): desktop_path='C: ...
- python小工具myqr生成动态二维码
python小工具myqr生成动态二维码 (一)安装 (二)使用 (一)安装 命令: pip install myqr 安装完成后,就可以在命令行中输入 myqr 查看下使用帮助: myqr --he ...
- Python小数据池,代码块
今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析 一. id is == 二. 代码块 三. 小数据池 四. ...
随机推荐
- 集合中的工具类Collections和Arrays
集合框架的工具类: Collections: 方法sort(): List<String> list = new ArrayList<String>(); lis ...
- 假如数组接收到一个null,那么应该怎么循环输出。百度结果,都需要提前判断。否则出现空指针异常。。我还是想在数组中实现保存和输出null。
假如数组接收到一个null,那么应该怎么循环输出.因为foreach与obj.length都会报错.null不是对象,foreach中不能赋值? sp页面forEach一个存放对象的集合,怎么判断其中 ...
- SVN的搭建及使用(三)用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突,重新设置用户名和密码等
添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态,如图: 这时候,你需要告知TortoiseSVN你的操作,如图: 加入以后,你的文件会变 ...
- Lua基础---运算符
众所周知,C,C++,python等语言都有运算符,那么Lua也不例外,因为它是C写的嘛! Lua分为主要三类运算符,分别是算术运算符,关系运算符,逻辑运算符,还有特殊运算符. 1.算术运算符有: + ...
- 深度学习(六十二)SqueezeNet网络设计思想笔记
- 正则化项L1和L2的区别
https://blog.csdn.net/jinping_shi/article/details/52433975 https://blog.csdn.net/zouxy09/article/det ...
- spring 和springmvc 在 web.xml中的配置
(1)问题:如何在Web项目中配置Spring的IoC容器? 答:如果需要在Web项目中使用Spring的IoC容器,可以在Web项目配置文件web.xml中做出如下配置: <!-- Sprin ...
- JAVA线程死锁
文件名:DeadThreadByExtend.java 注: 1.起线程的时候用的是start方法,run方法也可以调用,但是仅仅相当于普通调用,在当前线程内执行. 2.synchronized 不能 ...
- Java Web 高性能开发,前端的高性能
Java Web 高性能开发,第 2 部分: 前端的高性能 Web 发展的速度让许多人叹为观止,层出不穷的组件.技术,只需要合理的组合.恰当的设置,就可以让 Web 程序性能不断飞跃.Web 的思想是 ...
- raw_in_fields
在admin后台类中加入raw_id_fields(只适用于外键)后,会显示外键的详细信息