美文网首页
python 02数据结构

python 02数据结构

作者: 6c0fe9142f09 | 来源:发表于2018-06-20 14:20 被阅读6次

list数据结构 - 有序的结构体

# 增加
lis.append("小花")
lis.insert(0,"大白")
lis.append("小花")
# 删除
lis.pop(0)
lis.remove("小花") # remove的时候只remove找到的第一个参数
# 修改
lis[0] = "大叔"
# 查询
print(lis.index("小花"))
# 排序
lis.sort()
# 反转
lis.reverse()
#清除
lis.clear()
#查找个数
print(lis.count("大叔"))

元组 - 无法修改

# 元组具有无法修改的特点,我们使用元组的时候默认告诉对方,**这是一个无法修改的内容**
# 在一些数据库连接信息的定义时,我们可以采用元组
mysql_coon = ('192.168.1.109','root','123456',3306,'my_db')#定义元组

字典 - 独有的key-value数据结构

字典常用操作

# 字典的定义
map1 = {
    "name":"大树",
    "age":"20",
    "sex":"男",
    "qq":565506019
}

# 增操作
map1["marry"] = "未婚"
map1.setdefault("marry","未婚")

# 删除
map1.pop('marry')  #指定key删除 删除的时候key不存在是会报错的
del map1['age']  #用del来删,删除的时候key不存在是会报错的

# 改就很简单啦,直接赋值
map1["marry"] = "已婚"
# 字典的遍历操作
d = { 'a':1,'b':2 }
for k,v in d.items():
    print(k,v)         #可以
# 一般采用下面的方式进行字典遍历,能够提高遍历效率
for k in d:
    print(k, d.get(k))

实战操作 - 监控日志

# 题目
 1、监控日志
     1、如果一分钟内某个ip访问超过100次
     2、拿到ip,加入黑名单
178.210.90.90 - - [04/Jun/2017:03:44:13 +0800] "GET /wp-includes/logo_img.php HTTP/1.0" 302 161 "http://nnzhp.cn/wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "10.3.152.221"
178.210.90.90 - - [04/Jun/2017:03:44:13 +0800] "GET /blog HTTP/1.0" 301 233 "http://nnzhp.cn/wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "10.3.152.221"
178.210.90.90 - - [04/Jun/2017:03:44:15 +0800] "GET /blog/ HTTP/1.0" 200 38278 "http://nnzhp.cn/wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "10.3.152.221"
66.249.75.29 - - [04/Jun/2017:03:45:55 +0800] "GET /bbs/forum.php?mod=forumdisplay&fid=574&filter=hot HTTP/1.1" 200 17482 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-"
37.9.169.20 - - [04/Jun/2017:03:47:59 +0800] "GET /wp-admin/security.php HTTP/1.1" 302 161 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-"
37.9.169.20 - - [04/Jun/2017:03:48:01 +0800] "GET /blog HTTP/1.1" 301 233 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-"
37.9.169.20 - - [04/Jun/2017:03:48:02 +0800] "GET /blog/ HTTP/1.1" 200 38330 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-"
37.9.169.20 - - [04/Jun/2017:03:48:21 +0800] "GET /wp-admin/security.php HTTP/1.1" 302 161 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-"
37.9.169.20 - - [04/Jun/2017:03:48:21 +0800] "GET /blog HTTP/1.1" 301 233 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-"
37.9.169.20 - - [04/Jun/2017:03:48:23 +0800] "GET /blog/ HTTP/1.1" 200 38330 "http://nnzhp.cn/wp-admin/security.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4" "-"
42.236.49.31 - - [04/Jun/2017:03:49:04 +0800] "GET /questions HTTP/1.1" 200 41977 "http://bbs.besttest.cn/questions" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36; 360Spider" "-"
66.249.75.28 - - [04/Jun/2017:03:49:42 +0800] "GET /bbs/forum.php?mod=forumdisplay&fid=473&filter=digest&digest=1 HTTP/1.1" 200 17242 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" "-"
123.125.71.60 - - [04/Jun/2017:03:52:50 +0800] "GET /robots.txt HTTP/1.1" 302 161 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" "-"
# 答案
2、思路
    1、打开日志文件
    2、对每一行进行读取,并split,读取第一个元素
    3、找出所有的ip,统计次数
    4、判断每个ip次数>100,就发邮件
    5、记录文件指针,给下次读的时候用
    6、等待60秒()

import time
point = 0
while True:
    with open("access.log",'r',encoding='utf-8') as logFile:
        logFile.seek(point)
        ip_info = {}  # 存放ip和ip出现的次数
        for line in logFile:
            ip = line.split()[0]
            if ip in ip_info:
                ip_info[ip] += 1
            else:
                ip_info[ip] = 1
        point = logFile.tell() #获取当前文件指针的位置
        # print(ip_info)
        for k in ip_info:
            if ip_info[k] > 100:
                print("该%s  IP在攻击你"%k)
        time.sleep(5)

集合 - 天生去重

集合的特点

#  天生去重
list = [1,2,2,2,1,1,2,3,4,2]
print(set(list))  # {1, 2, 3, 4}

# 关联操作
# 集合的关联操作可以方便的对两个集合进行统计

集合的常用操作

# 定义集合
set1 = set()

# 集合增操作
set1.add(222)
set1.update([2,7,8]) # 当需要增加的内容是一个list的时候,使用update

# 集合删操作
set1.remove(222) #删除不存在的内容时会报错
set1.discard(8) # 不会报错
set1.pop() # pop出最左边的内容

集合的关联操作

# 初始定义
list = [0,1,2,2,2,1,1,2,3,4,2]
list_2 = [2,3,4,5,6,3,1,2,3,2]
set1 = set(list)
set2 = set(list_2)
# 并集
print(set1 | set2)
print(set1.union(set2))
# 交集
print(set1 & set2)
print(set1.intersection(set2))
# 差集
print(set2 - set1)
print(set2.difference(set1))
# 对称差集
print(set1 ^ set2)
print(set1.symmetric_difference(set2))

实战操作 - 1 密码实战

# 输入一串密码,需要包含数字、特殊字符、大写字母、英文字母
---------示例---------
当输入为abc > no
abc#$%213AM > yes
# 答案

import string
pwd = input("请输入你的密码:")
# 密码中要包含大写,小写字母和数字和特殊字符
pwd_set = set(pwd)

print(pwd_set)
# print(string.digits) #所有的数字
a = pwd_set.intersection(set(string.digits))
# print(string.punctuation) #所有的特殊字符
b = pwd_set.intersection(set(string.punctuation))
# print(string.ascii_lowercase) #所有的小写字母
c = pwd_set.intersection(set(string.ascii_lowercase))
# print(string.ascii_uppercase)# 所有的大写字母
d = pwd_set.intersection(set(string.ascii_uppercase))

if  a and b and c and d:
    print("yes")
else:
    print("no")

实战操作 - 2 生成双色球

题目:
    # .中奖号码由6个红色球号码和1个蓝色球号码组成。 ...
    #random模块的用法
        #写一个函数,产生双色球号码,输入几就产生多少条,这些号码不能重复,要写到文件里面
        # 1个篮球         1-16
        # 6个红色球       1-33

相关文章

网友评论

      本文标题:python 02数据结构

      本文链接:https://www.haomeiwen.com/subject/bfdzeftx.html