Python冒泡算法和修改配置文件

先学习之前未完成的冒泡算法

li = [13,22,6,99,11]

从小到大

从第一个数字比较把大的往后移位

for m in range(4):

  num1 = li[m]

  num2 = li[m+1]

  if num1 > num2:

    temp = li[m]

    li[m] = num2

    li[m+1] = temp

print li

循环四次就把最大数放到列表的最后

for m in range(3):

  num1 = li[m]

  num2 = li[m+1]

  if num1 > num2:

    temp = li[m]

    li[m] = num2

    li[m+1] = temp

以此类推写成以下代码

vim day4-1.py

#!/usr/bin/python
# -*- coding:utf-8 -*-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<br>li = [13,22,6,99,11]
for m in range(4):      #循环
    num1 = li[m]       
    num2 = li[m+1]
    if num1 > num2:      #前一个数字和后一个对比如果前面数字大与后面的对调
        temp = num1
        li[m] = num2
        li[m+1] = temp
print li
 
for m in range(3):
        num1 = li[m]
        num2 = li[m+1]
        if num1 > num2:
                temp = num1
                li[m] = num2
                li[m+1] = temp
 
print li
 
for m in range(2):
        num1 = li[m]
        num2 = li[m+1]
        if num1 > num2:
                temp = num1
                li[m] = num2
                li[m+1] = temp
 
print li
 
for m in range(1):
        num1 = li[m]
        num2 = li[m+1]
        if num1 > num2:
                temp = num1
                li[m] = num2
                li[m+1] = temp
 
print li            #多次循环得到排序结果

  

[root@VPN scripts]# python day4-1.py
[13, 6, 22, 11, 99]
[6, 13, 11, 22, 99]
[6, 11, 13, 22, 99]
[6, 11, 13, 22, 99]

 

这样的循环很繁琐,假如不知道列表的长度更加麻烦需要多次循环

vim day4-2.py

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python
# -*- coding:utf-8 -*-
li = [13,22,6,99,11]
for n in range(1,len(li)-1):            #外层循环1,2,3,4
        for m in range(len(li)-n):      #内层循环4,3,2,1
                num1 = li[m]
                num2 = li[m+1]
                if num1 > num2:
                        temp = li[m]
                        li[m] = li[m+1]
                        li[m+1] = temp
print li

  运行结果的一样的

[root@VPN scripts]# python day4-2.py
[6, 11, 13, 22, 99]

 

下面实现上节课的专业

一个配置文件需要实现以下三个功能

1,查找

2,添加

3,删除

 配置文件ha

1
2
3
4
5
6
7
backend www.oldboy.org
        server 100.1.7.9 100.1.7.9 weight
backend buy.oldboy.org
        server 100.1.7.9 100.1.7.9 weight 20 maxconn 300
        server 100.1.7.10 100.1.7.10 weight 20 maxcont 300
backend home.oldboy.org
        server 100.1.7.9 100.1.7.9 weight 20 maxconn 300

vim day4-3.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python
# -*- coding:utf-8 -*-
def fetch(backend):
        fetch_list = []                                                 #定义一个空的列表用来放置对应的配置数据
        with open('ha') as obj:                                         #打开配置文件
                flag = False                                            #定义一个flag用于循环的判断
                for line in obj:                                        #一行行读取文件中的数据
                        if line.strip() == "backend %s" %backend:       #如果匹配到backend +对应的参数 
                                flag = True                             #把flag置为True
                                continue                                #结束本次循环
                        if flag and line.strip().startswith('backend'): #如果flag为True并且开始为backend结束整个循环
                                break                                   #如果遇到下一个backend代表已经读取到了下一个配置文件了
                        if flag and line.strip():                       #如果flag为真并且不是空行添加到fetch_list列表
                                fetch_list.append(line.strip())
        return fetch_list                                               #函数返回这个列表
result = fetch("buy.oldboy.org")
print (result)

  

下面实现添加

添加的格式为

s = '{"backup":"www.oldboy.org","record":{"server":"100.1.7.9","weight":20,"maxconn":30}}'

添加的步骤为

1,找到指定backend下所有记录

2,处理记录

  原来存在该记录

  原来不存在该记录

当原来配置文件不存在这条记录时

vim day4-4.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/python
# -*- coding:utf-8 -*-
import json
import os
def fetch(backend):
    fetch_list = []                         #定义一个空的列表用来放置对应的配置数据   
    with open('ha') as obj:                     #打开配置文件
        flag = False                        #定义一个flag用于循环的判断
        for line in obj:                    #一行行读取文件中的数据
            if line.strip() == "backend %s" %backend:   #如果匹配到backend +对应的参数   
                flag = True             #把flag置为True
                continue                #结束本次循环
            if flag and line.strip().startswith('backend'): #如果flag为True并且开始为backend结束整个循环
                break                   #如果遇到下一个backend代表已经读取到了下一个配置文件了
            if flag and line.strip():           #如果flag为真并且不是空行添加到fetch_list列表
                fetch_list.append(line.strip())
    return fetch_list                       #函数返回这个列表
#result = fetch("buy.oldboy.org")
#print (result)
 
def add1(dict_info):
    backend_title = dict_info.get('backend')
    #"backend www.oldboy.org"
    current_title = "backend %s" %backend_title
    current_record = "server %s %s weight %d maxconn %d" %(dict_info['record']['server'],dict_info['record']['server'],dict_info['record']['weight'],dict_info['record']['maxconn'])
    #获取指定backend下面的所有记录
    fetch_list = fetch(backend_title)
    if fetch_list:
        pass #存在backend,则只需再添加记录
    else:
        with open('ha','r') as read_obj,open('ha.new','w') as write_obj: #不存在backend,添加记录和backend
            #把原配置文件中内容,写入新配置文件中
            for line in read_obj:
                write_obj.write(line)
            write_obj.write("\n"+current_title+'\n')
            temp = "%s%s\n" %(" "*8,current_record)
            write_obj.write(temp)
s = '{"backend":"www.oldboy.org","record":{"server":"100.1.7.9","weight":20,"maxconn":30}}'     #s是一个字符串
data_dict = json.loads(s)                                   #使用json方法把字符串转换成字典     
add1(data_dict)
os.rename("ha","ha.bak")
os.rename("ha.new","ha")

 执行结果会在原配置文件下面增加记录,记录的标题为www.oldboy.org内容为server 100.1.7.9 100.1.7.9 weight 20 maxconn 30

使用os模块的重命名功能把新生成的配置文件替换原来的配置文件,原来的配置文件做一个备份ha.bak

 

当原来配置文件存在这条记录标题时

如果插入的记录已经存在不插入,不存在则插入

vim day4-5.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/python
# -*- coding:utf-8 -*-
import json
import os
def fetch(backend):
    fetch_list = []                         #定义一个空的列表用来放置对应的配置数据   
    with open('ha') as obj:                     #打开配置文件
        flag = False                        #定义一个flag用于循环的判断
        for line in obj:                    #一行行读取文件中的数据
            if line.strip() == "backend %s" %backend:   #如果匹配到backend +对应的参数   
                flag = True             #把flag置为True
                continue                #结束本次循环
            if flag and line.strip().startswith('backend'): #如果flag为True并且开始为backend结束整个循环
                break                   #如果遇到下一个backend代表已经读取到了下一个配置文件了
            if flag and line.strip():           #如果flag为真并且不是空行添加到fetch_list列表
                fetch_list.append(line.strip())
    return fetch_list                       #函数返回这个列表
#result = fetch("buy.oldboy.org")
#print (result)
 
def add1(dict_info):
    backend_title = dict_info.get('backend')
    #"backend www.oldboy.org"
    current_title = "backend %s" %backend_title
    current_record = "server %s %s weight %d maxconn %d" %(dict_info['record']['server'],dict_info['record']['server'],dict_info['record']['weight'],dict_info['record']['maxconn'])
    #获取指定backend下面的所有记录
    fetch_list = fetch(backend_title)
    if fetch_list:  #存在backend,则只需再添加记录
        if current_record in fetch_list:
            pass        #如果这条记录存在什么都不做
        else:
            fetch_list.append(current_record)#得到处理完之后的中间部分
        #读配置文件,写新配置文件
        #读上->新上
        #新配置处理完之后配置文件写入新配置文件中
        #读下->新下
        flag = False
        has_write = False
        with open('ha','r') as read_obj,open('ha.new','w') as write_obj:
            for line in read_obj:
                if line.strip() == current_title:
                    flag = True
                    write_obj.write(line)#把backend写入到新配置文件里
                    continue
                if flag and line.strip().startswith('backend'): #如果flag为True并且开始为backend结束整个循环
                               #    write_obj.write(line)
                    flag = False
                if flag and line.strip():
                    #把已经处理完的数据fetch_list写入到新配置文件中
                    if not has_write:
                        for new_line in fetch_list:
                            temp = "%s%s\n" %(" "*8,new_line)                                
                            write_obj.write(temp)
                        has_write = True   
                else:
                    write_obj.write(line)
    else:
        with open('ha','r') as read_obj,open('ha.new','w') as write_obj: #不存在backend,添加记录和backend
            #把原配置文件中内容,写入新配置文件中
            for line in read_obj:
                write_obj.write(line)
            write_obj.write("\n"+current_title+'\n')
            temp = "%s%s\n" %(" "*8,current_record)
            write_obj.write(temp)
s = '{"backend":"buy.oldboy.org","record":{"server":"100.1.7.39","weight":20,"maxconn":30}}'    #s是一个字符串
data_dict = json.loads(s)                                   #使用json方法把字符串转换成字典     
add1(data_dict)
os.rename("ha","ha.bak")
os.rename("ha.new","ha")

  

 

posted @   minseo  阅读(328)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示