一、eval函数复习:

a=[{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}]
print(type(a))b={'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}}
# print(type(b))
c=[{'sdf':123,'ddd':'afdaf'}]
# print(type(c))

d='[1,2,3]'
print(type(d))

二、insert函数 的复习:

p=[123,'xyz']
p.insert(0,'abc')
print(p)

三、write函数的复习:

filename = 'pragramming.txt'with open(filename,'w') as fileobject: #使用‘w’来提醒python用写入的方式打开fileobject.write('I love your name!''\nI love your cloth!''\nI love your shoes!''\nI love your hair!')
# 这种操作绝不会改动文件名的!!!!

with open(filename,'a') as fileobject: #使用‘a’来提醒python用附加模式的方式打开fileobject.write('\nI an superman.')

四、查询功能:

1.题目:haproxy.conf文件内容如下:

global        log 127.0.0.1 local2        daemon        maxconn 256        log 127.0.0.1 local2 infodefaults        log global        mode http        timeout connect 5000ms        timeout client 50000ms        timeout server 50000ms        option  dontlognull

listen stats :8888        stats enable        stats uri       /admin        stats auth      admin:1234

frontend oldboy.org        bind 0.0.0.0:80        option httplog        option httpclose        option  forwardfor        log global        acl www hdr_reg(host) -i www.oldboy.org        use_backend www.oldboy.org if www

backend www.oldboy1.org        server 101.1000.7.9 101.1000.7.9 weight 20 maxconn 30        server 2.2.2.7 2.2.2.7 weight 30 maxconn 4000        server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000        server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000

backend www.oldboy2.org        server 3.3.3.3 3.3.3.3 weight 20 maxconn 3000backend www.oldboy20.org        server 10.10.0.10 10.10.0.10 weight 9999 maxconn 33333333333

2.查询功能要求与代码:
# 题目要求:
# 对于查询,输入backend 后面 的网址,就查出来server相关的内容
# 对于修改,必须是查到的情况下进行修改操作,如果没有查询到,修改个P
# 修改要求:将haproxy中的backend www.oldboy1.org下面的server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000
#            改成:server 2.2.2.5 2.2.2.5 weight 30 maxconn 4000def fetch(data):  #因为是查询功能,所以必须需要调用一个参数# print('\033[1;43m这是查询功能\033[0m')# print('\033[1;43m用户输入的数据是\033[0m',data)backend_data='backend %s' %datawith open('haproxy.conf','r') as read_f:tag=Falseret=[]for read_line in read_f:if read_line.strip()==backend_data:tag=Truecontinueif tag and read_line.startswith('backend'):break  #后面有return,因此这里先放一个breakif tag:   #这时,tag为ture状态print('\033[1;45m%s\033[0m'%read_line,end='')ret.append(read_line)if not tag:   #这时,tag还是原来的false,这时只是做了一个for循环遍历了每一行而已passreturn retdef add():pass
def change(data):# print('这个是修改功能')# print('用户输入的数据是',data)# data[0]  #文件当中的一条记录backend=data[0]['backend']     #它就是:www.oldboy1.orgbackend_data='backend %s'%backend #它就是:bankend www.oldboy1.org# 注释:[{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}]#        server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000old_server_record='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data[0]['record']['server'],data[0]['record']['server'],data[0]['record']['weight'],data[0]['record']['maxconn'])new_server_record = '%sserver %s %s weight %s maxconn %s\n' % (' ' * 8,data[1]['record']['server'],data[1]['record']['server'],data[1]['record']['weight'],data[1]['record']['maxconn'])print('用户想要修改的记录是',old_server_record)res=fetch(backend)print('来自change函数——》',res)if not res:   #表示res是空列表,即用户输入的内容在文件中找不到,找不到,则不能修改!return '修改记录不存在'if old_server_record not in res:       #表示如果虽然找到了www.oldboy1.org,但是对应的下方的serve内容不存在,同样不能修改!return '修改记录不存在'           #需要判断我找到的要修改的记录是不是在我的列表里面else:    #这时,完成修改操作index=res.index(old_server_record)# data有两个值,data[0]是我要改的值,data[1]是我要修改成的值res[index]=new_server_record# print('列表中的值已经修改')#因为文件操作的时候如果修改则会将原来的东西全部删除创建新的,# 所以for循环将原来没有改得值重新插入新文件中,得到修改过的文件res.insert(0,'%s\n'%backend_data)with open('haproxy.conf','r') as read_f,\open('haproxy.conf_new','w') as write_f:tag=Falsetag2=Falsefor read_line in read_f:    #server#write_f.write(read_line)  #这里相当于把haproxy里面的内容读一行复制给write_f,读一行复制给write_fif read_line.strip()==backend_data:tag=True  #警报拉响!continueif tag and read_line.startswith('backend'):tag=Falseif tag:if not tag2:for record in res:  #当警报拉响的时候,我就直接向新文件里面写列表(res)的内容即可。
                            write_f.write(record)tag2=Trueif not tag:write_f.write(read_line)def delete():passif __name__ == '__main__':  #规定:执行代码放在本行下面msg='''1:查询2:添加3:修改4:删除5:退出'''msg_dic={'1':fetch,'2':add,'3':change,'4':delete,}while True:print(msg)choice=input('请输入你的选项:').strip()if not choice:continueif choice=='5':breakdata=input('请输入需要查询的数据:').strip()if choice!='1':data=eval(data)  #只有修改功能需要转换为相应的格式,其他功能不需要res=msg_dic[choice](data)print(res)# 根据修改要求,即:# #将[{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},# 改成{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}]#输入:[{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}]

3.查询功能的part1的test.py

# while True:
#     print('level')
#     choice=input('level1>>: ').strip()
#     if choice=='quit':break   #表示退出当前层
#     while True:
#         print('level2')
#         choice = input('level2>>: ').strip()
#         if choice == 'quit': break   #表示退出当前层,返回上一层level1
#         while True:
#             print('level3')
#             choice = input('level3>>: ').strip()
#             if choice == 'quit': break#
# tag=True
# while True:
#     print('level')
#     choice=input('level1>>: ').strip()
#     if choice=='quit':break   #表示退出当前层
#     while True:
#         print('level2')
#         choice = input('level2>>: ').strip()
#         if choice == 'quit': break   #表示退出当前层,返回上一层level1
#         while True:
#             print('level3')
#             choice = input('level3>>: ').strip()
#             if choice == 'quit': break
# if choice=='quit_all':tag=False   #这样的话,不管是哪一层,输入quit_all就会全部结束#
# a=[1,2,3,4,5]
# b=['asx','sdf','asda','alex','wupeiqi']
# print(a.index(3))
# print(b.index('asda'))
# # index()的作用:显示对象的索引位置
res=['        server 101.1000.7.9 101.1000.7.9 weight 20 maxconn 30\n', '        server 2.2.2.7 2.2.2.7 weight 30 maxconn 4000\n', '        server 10.10.10.1 10.10.10.1 weight 22 maxconn 2000\n', '        server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000\n', '\n']
data=[{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}]
old_server_record='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data[0]['record']['server'],data[0]['record']['server'],data[0]['record']['weight'],data[0]['record']['maxconn'])
index=res.index(old_server_record)
print(index)

4.修改功能的相关图片:

5.程序的解耦(基于查询功能的代码进行)

#在上个例子中,fetch()和change()里面的with open...下面的一坨都是在做文件处理功能。
#那么我就会想能不能将这个文件处理功能封装成一个函数
#从而这个程序和之前的程序效果是一样的,但是可读性更强!def file_handle(backend_data,res=None,type='fetch'):if type=='fetch':with open('haproxy.conf','r') as read_f:tag=Falseret=[]for read_line in read_f:if read_line.strip()==backend_data:tag=Truecontinueif tag and read_line.startswith('backend'):break  #后面有return,因此这里先放一个breakif tag:   #这时,tag为ture状态print('\033[1;45m%s\033[0m'%read_line,end='')ret.append(read_line)if not tag:   #这时,tag还是原来的false,这时只是做了一个for循环遍历了每一行而已passreturn retelif type == 'change':with open('haproxy.conf', 'r') as read_f, \open('haproxy.conf_new', 'w') as write_f:tag = Falsetag2 = Falsefor read_line in read_f:  # server# write_f.write(read_line)  #这里相当于把haproxy里面的内容读一行复制给write_f,读一行复制给write_fif read_line.strip() == backend_data:tag = True  # 警报拉响!continueif tag and read_line.startswith('backend'):tag = Falseif tag:if not tag2:for record in res:  # 当警报拉响的时候,我就直接向新文件里面写列表(res)的内容即可。
                            write_f.write(record)tag2 = Trueif not tag:write_f.write(read_line)def fetch(data):  #因为是查询功能,所以必须需要调用一个参数# print('\033[1;43m这是查询功能\033[0m')# print('\033[1;43m用户输入的数据是\033[0m',data)backend_data='backend %s' %datareturn file_handle(backend_data)def add():pass
def change(data):# print('这个是修改功能')# print('用户输入的数据是',data)# data[0]  #文件当中的一条记录backend=data[0]['backend']     #它就是:www.oldboy1.orgbackend_data='backend %s'%backend #它就是:bankend www.oldboy1.org# 注释:[{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}]#        server 2.2.2.4 2.2.2.4 weight 20 maxconn 3000old_server_record='%sserver %s %s weight %s maxconn %s\n'%(' '*8,data[0]['record']['server'],data[0]['record']['server'],data[0]['record']['weight'],data[0]['record']['maxconn'])new_server_record = '%sserver %s %s weight %s maxconn %s\n' % (' ' * 8,data[1]['record']['server'],data[1]['record']['server'],data[1]['record']['weight'],data[1]['record']['maxconn'])print('用户想要修改的记录是',old_server_record)res=fetch(backend)   #就是fetch(www.oldboy1.org)print('来自change函数——》',res)if not res:   #表示res是空列表,即用户输入的内容在文件中找不到,找不到,则不能修改!return '修改记录不存在'if old_server_record not in res:       #表示如果虽然找到了www.oldboy1.org,但是对应的下方的serve内容不存在,同样不能修改!return '修改记录不存在'           #需要判断我找到的要修改的记录是不是在我的列表里面else:    #这时,完成修改操作index=res.index(old_server_record)# data有两个值,data[0]是我要改的值,data[1]是我要修改成的值res[index]=new_server_record# print('列表中的值已经修改')#因为文件操作的时候如果修改则会将原来的东西全部删除创建新的,# 所以for循环将原来没有改得值重新插入新文件中,得到修改过的文件res.insert(0,'%s\n'%backend_data)file_handle(backend_data,type=='change')def delete():passif __name__ == '__main__':  #规定:执行代码放在本行下面msg='''1:查询2:添加3:修改4:删除5:退出'''msg_dic={'1':fetch,'2':add,'3':change,'4':delete,}while True:print(msg)choice=input('请输入你的选项:').strip()if not choice:continueif choice=='5':breakdata=input('请输入需要查询的数据:').strip()if choice!='1':data=eval(data)  #只有修改功能需要转换为相应的格式,其他功能不需要res=msg_dic[choice](data)print(res)



转载于:https://www.cnblogs.com/lijialun/p/10174606.html

圣诞节的整理前两周的内容4相关推荐

  1. 快速打爆新品:前两周高权重操作技巧

    现在淘宝卖家们越来越急躁,都想快速挣钱,快速有销量,但是往往事与愿违,做什么都需要稳扎稳打,往往一撮而就就事物很快就会没落,打造爆款也是一样,那么我们应该如何打造爆款呢?下面跟打击分享一个真实实例,关 ...

  2. db2 - 统计上一月,前两周的数据

    生产有提数的需求,需要统计上一月,前两周的数据 根据下面的函数,我很快给出了统计sql,但在闲暇至于回想起来,似乎有点问题,就有了本篇文章来记录此事. VALUES WEEK(CURRENT date ...

  3. 计算机二级前两周,知道这些,计算机二级两周够了

    如果你能穿越第一次计算机二级考试,那么当时的题库就只有两套.如果这次是3月份的话,九月份计算机二级题库就变成了以前的两套题加新增的2-3套题.迄今为止,计算机二级office.c语言已经增加到30多套 ...

  4. 乔治·H·W·布什与米哈伊尔·戈尔巴乔夫在戈尔巴乔夫离任前两小时沟通内容

    Rick Wilking/Reuters 1991年7月,乔治·H·W·布什与米哈伊尔·戈尔巴乔夫在莫斯科. 华盛顿--在1991年12月25日宣布辞任苏联总统不到两小时之前,米哈伊尔·S·戈尔巴乔夫 ...

  5. python前两周练习

    ''' 循环吃5个馒头 但第三个馒头发霉了,不能吃 ''' print('*'*8,'吃馒头','*'*8) name = '赵飞' name1 = '张无忌' for i in range(1,6) ...

  6. SQL总结 学期前8周学习内容

    一眨眼,一个学期的一半过去了,在此梳理下SQL知识.主要是SQL,数据库理论很少,只写写感觉在编写SQL语句时需要非常注意的理论知识 1.一些名词 1.1 域 1.2 关系 1.3 参照关系 1.4 ...

  7. 两周后上线,老板你在开玩笑吗?

    大Boss,小Boss 大概除了马云.马化腾这样的顶级领导外,每个人都有个领导,按外企的说法,也叫 Boss. 实习生.新员工上面有一个小 Boss,管好自己的一亩三分地,为新人的成长负责:小 Bos ...

  8. 运用UE和Blocks,仅用两周打造一个VR游戏(52VR完整版译文)

    (本文52VR在原版译文上增添了关键的未翻译部分,并修正了部分翻译) 在今年初,3D建模者Jarlan Perez来到了Blocks团队,参加了为期两周的内容开发挑战.目标是在两周时间内通过Block ...

  9. java实习第二次两周总结

    java实习第二次两周总结 来到平台所实习的第二个两周过去了,也就是一个月过去了.从第二周开始我开始做图书馆管理系统.第三周的任务是系统原型界面设计及其接口定义.第四周的任务是完成v1版本的图书管理模 ...

最新文章

  1. 公司--查看SQL 用web.xml文件
  2. 证书重复冲突问题:Command /usr/bin/codesign failed with exit code 1
  3. 【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 设置 xml 标签内容 | 设置 xml 标签属性 )
  4. WF4 持久化 第四篇
  5. java 论坛_武汉课工场JAVA培训:“真AI、超智能”人工智能大咖论坛解读
  6. python_面向对象进阶之元类
  7. Python中的defaultdict函数
  8. ActiveMQ性能测试
  9. python应用领域介绍
  10. 我的服装DRP之开发感悟
  11. vim nerdtree 标签_学业支持 | OS课程——给你的vim换套新衣服
  12. java 读取mysql数据_使用java从mysql数据库读取数据
  13. layUI table 内容超出宽度怎么换行显示,而不是显示省略号
  14. 全球信息数据量陡增 大数据应用前景广阔
  15. 报错解决:ninja: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20‘ not found (required by ninja)
  16. 探码SaaS帮助企业开展数字化营销之路!
  17. 什么是数字式射频信号发生器
  18. CRM系统有哪些效果?
  19. 全新荣耀手表GS 3正式发布,8通道心率AI引擎精准高效管理健康生活
  20. 苹果手机投屏软件_小技巧!苹果手机怎么投屏到笔记本?

热门文章

  1. LeetCode 123买卖股票的时机 III
  2. php 解析返回的xml,php解析xml的几种方式
  3. 搭建etcd 3.4.15集群(详细教程,包括选举过程、数据备份和恢复)
  4. DB2查询主键、索引、表约束
  5. unity3d php js,【Unity开发】unity3d中的http通信?post/get
  6. 如何在电脑手机间互传文件?
  7. 【NOIP2016】【Luogu2010】回文日期(枚举,可以计算出部分值)
  8. 把变量赋值给寄存器_阻塞赋值和非阻塞赋值的区别与记忆
  9. vs2019写c语言用不了scanf,VS2010里编C程式不能用scanf()吗?
  10. git创建版本库(1)