python 文件修改记录_python——文件查询、修改操作练习

本文介绍了使用Python进行文件查询和修改的操作。定义了file_handle函数,根据参数type执行读取(fetch)或修改(change)操作。fetch功能用于查找特定backend数据并打印,change功能则读取原始文件,创建新文件并替换指定backend的server信息,最后更新文件名以完成替换。还包含了fetch、add、change、delete四个辅助函数,用于交互式的文件操作。
摘要由CSDN通过智能技术生成

def file_handle(backend_data,res = None,type = 'fetch'):if type == 'fetch':

ret=[]

with open('haproxy','r') asread_f :

tag=Falsefor read_line inread_f:if read_line.strip() ==backend_data:

tag=Truecontinue

if tag and read_line.startswith('backend'):break#server读完,读到下一个backend时,关闭for循环,否则就会将 backend www.oldboy1.org后面的内容全部读出来iftag :

print('\033[1;45m%s\033[0m'%read_line,end = '')      #把读到的哪一行server打印出来

ret.append(read_line)                     #将满足条件的哪一行server添加到列表中returnret                                  #函数返回该列表,及返回查询结果

elif type== 'change':

import os

with open ('haproxy','r') as read_f, open('haproxy_new','w') aswrite_f:

tag=False

has_write= False                           #设置has_write 阀门 是为了防止每一次server都运行一遍 for record in res: 如果这样,新文件中就会有四条修改过的backend www.oldboy1.org的相关内容for read_line inread_f:if read_line.strip() ==backend_data:

tag=Truecontinue

if tag and read_line.startswith('backend'):

tag=False                    #如果此处不对tag进行关闭,那么在新文件中写完backend www.oldboy1.org内的server就会停止ifnot tag:

write_f.write(read_line)else:ifnot has_write:for record inres:            #把新纪录写在新文件中

write_f.write(record)

has_write=True

os.rename('haproxy','haproxy.bak')             #此三步操作是使新文件覆盖老文件,先将老文件换名,再将新文件换成老文件原来的名,在删除老文件

os.rename('haproxy_new','haproxy')

os.remove('haproxy.bak')

def fetch(data):

print('\033[1;43m这是查询功能\033[0m')

print('\033[1;43m用户数据是\033[0m',data)

backend_data= 'backend %s' %datareturnfile_handle(backend_data)

def add():

pass

def change(data):

print('这是修改功能')

print('用户输入的数据是',data)

backend= data[0]['backend']                     #文件当中的一条记录 如 www.oldboy1.org

backend_data= 'backend %s' %backend

old_server_record= '%sserver %s weight %s maxconn %s\n' % (' '*8,data[0]['record']['server'],data[0]['record']['weight'],data[0]['record']['maxconn']) #因为传进来的参数是列表(内包含两个字典),通过此语句将要修改的数据拼接成完整的字符串

new_server_record= '%sserver %s weight %s maxconn %s\n' % (' '*8,data[1]['record']['server'],data[1]['record']['weight'],data[1]['record']['maxconn'])

print('用户想要修改的记录是',old_server_record)

res=fetch(backend)                        #获取backend 后的server内容if not res or old_server_record not inres:return '你要修改的记录不存在'

else:

index=res.index(old_server_record)

res[index]=new_server_record                #先在列表中完成新老记录的修改,此处用新记录代替老记录

res.insert(0,'%s\n' %backend_data)                #此处不能用append,因为调用此方法会将 backend_data 数据,将其添加到开头,因此应用insert方法添加到列表末尾,此语句的作用是避免新文件没有backend...,因为在此之前,res的列表种不包含backend...

file_handle(backend_data,res= res,type = 'change')

def delete():

passif __name__ == '__main__':

msg= ''' 1:查询,2:添加,3:修改,4:删除,5:退出,'''msg_dic={'1':fetch,'2':add,'3':change,'4':delete,

}whileTrue:

print(msg)

choice= input('请输入你的选项:').strip()if not choice : continue

if 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 2.2.2.4','weight':20,'maxconn':3000}},{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5 2.2.2.5','weight':30,'maxconn':4000}}]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值