python 文件数据的操作

一.能执行的代码应当放到"_name _==’_main _’:"下(可能还被其他人调用)(一个python文件当作一个单独的程序运行时,总为True;文件当模块导入时,为False)

二.解耦与耦合
1.耦合:两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象(两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象)(耦合性是程序结构中各个模块之间相互关联的度量)
2.程序的解耦:解除耦合关系,可理解为降低耦合度(尽可能减少代码耦合。原则就是A功能的代码不要写在B功能的代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但不要直接交叉写)

二.已有文件haproxy.conf(包含backend在内的多种数据库类型):
1.预处理部分:

import os

def fetch(data):
    pass
def add():    
    pass
def change():    
    pass
def delete():    
    pass
    
def fi()
if _name _=='_main _':
    msg="1:查询fetch,2:添加add,3:修改change,4:删除delete,5:退出logout"
    msg_dict={'1':fetch\n'2':add\n'3':change\n'4':delete\n'5':logout}
    
    while Ture: 
        print(msg)
        choice=input("请输入您的需求:")     #传入的数据是str
        if choice==5:
            break
        data=input("请输入数据:")    
        if choice!=1:
            data=eval(data)
        print(res)

2.文件处理部分:

def file_handler(backend_data,type="fetch",res=None):

if type==:fetch":
        with open("haproxy.conf","r",encoding="utf-8") as read_f:  
            flag = False #设置一个开关
            ret_list=[]
            for line in read_f:  #遍历文件到line这个变量中
                if line.strip() == backend_data:     #strip()以去除每行结尾处\n
                    tag=True
                    continue
                if  tag:
                    if line.startswith("backend")
                        break
                    else:   
                        print("%s"%line,end="")     #end=""避免多回车一次
                        ret_list.append(line)
    return ret
    
elif type=="change":
    with open("haproxy.conf","r") as read_f,open("new-haproxy.conf","w") as write_f:
        tag=False
        has_write=False
        for readline in read_f:
            if readline.strip()==backend_data:
                tag=True
                continue
            if tag and readline.startswith("backend")     #不能与if tag合并,否则写入错误数据
                tag=False
            if tag:
                if not has_write:
                    for record in a:
                        write_f.write(record)
                    has_write=True
            if not tag:
                write_f.write(readline)
#实现了程序的解耦,文件处理功能的代码单独写

3.对haproxy.conf文件查询功能:

def fetch(data):
    backend_data="backend %s"%data
    with open("haproxy.conf","r",encoding="utf-8") as read_f:
        flag = False #设置一个开关
        ret_list=[]
        for line in read_f:  #遍历文件到line这个变量中
            if line.strip() == backend_data:     #strip()以去除每行结尾处\n
                tag=True
                continue
            if  tag:
                if line.startswith("backend")
                    break
                else:   
                    print("%s"%line,end="")     #end=""避免多回车一次
                    ret_list.append(line)
    return ret_list
    
a=fetch(www.ordboy1.org)
print(a)

使用file_handler版本:

def fetch(data):
    backend_data="backend %s"%data
    res=file_handler(backend_data)
    return res

4.对haproxy.conf文件添加功能:

5.对haproxy.conf文件修改功能:

def change(data):     #传入的数据是str
    backend=data[0]['backend']     #文件中的一条记录www.oldboy1.org
    backend_data="backend %s"%backend

    old_sever_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_sever_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("要修改的记录是:%s"%old_server_record)
    a=fetch(backend)
    print("来自fetch的结果是:%s"%a)

    if not a or old_server_record not in a:
        return "要修改的记录不存在"
    else:
        index=a.index(old_server_record)
        a[index]=new_server_record
        
    a.insert(0,"%s\n"%backend_data)
    with open("haproxy.conf","r") as read_f,open("new-haproxy.conf","w") as write_f:
        tag=False
        has_write=False
        for readline in read_f:
            if readline.strip()==backend_data:
                tag=True
                continue
            if tag and readline.startswith("backend")     #不能与if tag合并,否则写入错误数据
                tag=False
            if tag:
                if not has_write:
                    for record in a:
                        write_f.write(record)
                    has_write=True
            if not tag:
                write_f.write(readline)
    os.rename("haproxy.conf","haproxy2.conf")        
    os.rename("new-haproxy.conf","haproxy.conf")
    os.remove("haproxy2.conf")

c=change([{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy2.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}])
print(c)

使用file_handler版本:

def change(data):     #传入的数据是str
    backend=data[0]['backend']     #文件中的一条记录www.oldboy1.org
    backend_data="backend %s"%backend

    old_sever_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_sever_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("要修改的记录是:%s"%old_server_record)
    a=fetch(backend)
    print("来自fetch的结果是:%s"%a)

    if not a or old_server_record not in a:
        return "要修改的记录不存在"
    else:
        index=a.index(old_server_record)
        a[index]=new_server_record
        
    a.insert(0,"%s\n"%backend_data)
    file_handler(backend_data,type="change",res=a)
       
    os.rename("haproxy.conf","haproxy2.conf")        
    os.rename("new-haproxy.conf","haproxy.conf")
    os.remove("haproxy2.conf")

c=change([{'backend':'www.oldboy1.org','record':{'server':'2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy2.org','record':{'server':'2.2.2.5','weight':30,'maxconn':4000}}])
print(c)

6.对haproxy.conf文件删除功能:

7.对haproxy.conf文件退出功能:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值