python查找文件并重命名_Python学习 查询 修改 文件 文件重命名 tag用法

该代码实现了一个用于管理HAProxy配置文件的工具。它支持查询、添加、删除和修改后端服务器配置。通过指定后端数据,可以查询到匹配的配置行,并打印出来。添加操作会将新的后端数据追加到配置文件中,删除操作根据给定的数据移除相应配置,修改操作则更新现有记录。所有更改均保存并备份原有文件。
摘要由CSDN通过智能技术生成

#_*_coding:utf-8_*_

importosdef file_handle(filename,backend_data,record_list=None,type='fetch'): #type:fetch append change

new_file=filename+'_new'bak_file=filename+'_bak'

if type == 'fetch':

r_list=[]

with open(filename,'r') as f:

tag=Falsefor line inf:if line.strip() ==backend_data:

tag=Truecontinue

if tag and line.startswith('backend'):break

if tag andline:

r_list.append(line.strip())for line inr_list:print(line)returnr_listelif type == 'append':

with open(filename,'r') as read_file, \

open(new_file,'w') as write_file:for r_line inread_file:

write_file.write(r_line)for new_line inrecord_list:if new_line.startswith('backend'):

write_file.write(new_line+ '\n')else:

write_file.write("%s%s\n" % (' ' * 8, new_line))

os.rename(filename, bak_file)

os.rename(new_file, filename)

os.remove(bak_file)elif type == 'change':

with open(filename,'r') as read_file, \

open(new_file,'w') as write_file:

tag=False

has_write=Falsefor r_line inread_file:if r_line.strip() ==backend_data:

tag=Truecontinue

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

tag=Falseif nottag:

write_file.write(r_line)else:if nothas_write:for new_line inrecord_list:if new_line.startswith('backend'):

write_file.write(new_line+'\n')else:

write_file.write('%s%s\n' %(' '*8,new_line))

has_write=True

os.rename(filename, bak_file)

os.rename(new_file, filename)

os.remove(bak_file)deffetch(data):

backend_data="backend %s" %datareturn file_handle('haproxy.conf',backend_data,type='fetch')defadd(data):

backend=data['backend']

record_list=fetch(backend)

current_record="server %s %s weight %s maxconn %s" %(data['record']['server'],\

data['record']['server'],\

data['record']['weight'],\

data['record']['maxconn'])

backend_data="backend %s" %backendif notrecord_list:

record_list.append(backend_data)

record_list.append(current_record)

file_handle('haproxy.conf',backend_data,record_list,type='append')else:

record_list.insert(0,backend_data)if current_record not inrecord_list:

record_list.append(current_record)

file_handle('haproxy.conf',backend_data,record_list,type='change')defremove(data):

backend=data['backend']

record_list=fetch(backend)

current_record="server %s %s weight %s maxconn %s" %(data['record']['server'],\

data['record']['server'],\

data['record']['weight'],\

data['record']['maxconn'])

backend_data= "backend %s" %backendif not record_list or current_record not inrecord_list:print('\033[33;1m无此条记录\033[0m')return

else:#处理record_list

record_list.insert(0,backend_data)

record_list.remove(current_record)

file_handle('haproxy.conf',backend_data,record_list,type='change')defchange(data):

backend=data[0]['backend']

record_list=fetch(backend)

old_record="server %s %s weight %s maxconn %s" %(data[0]['record']['server'],\

data[0]['record']['server'],\

data[0]['record']['weight'],\

data[0]['record']['maxconn'])

new_record= "server %s %s weight %s maxconn %s" % (data[1]['record']['server'], \

data[1]['record']['server'], \

data[1]['record']['weight'], \

data[1]['record']['maxconn'])

backend_data="backend %s" %backendif not record_list or old_record not inrecord_list:print('\033[33;1m无此内容\033[0m')return

else:

record_list.insert(0,backend_data)

index=record_list.index(old_record)

record_list[index]=new_record

file_handle('haproxy.conf',backend_data,record_list,type='change')defqita(data):pass

if __name__ == '__main__':

msg='''1:查询

2:添加

3:删除

4:修改

5:退出

6:其他操作'''menu_dic={'1':fetch,'2':add,'3':remove,'4':change,'5':exit,'6':qita,

}whileTrue:print(msg)

choice=input("操作>>:").strip()if len(choice) == 0 or choice not in menu_dic:continue

if choice == '5':breakdata=input("数据>>:").strip()#menu_dic[choice](data)==fetch(data)

if choice != '1':

data=eval(data)

menu_dic[choice](data)#add(data)

#[{'backend':'www.oldboy20.org','record':{'server':'2.2.2.3','weight':20,'maxconn':3000}},{'backend':'www.oldboy10.org','record':{'server':'10.10.0.10','weight':9999,'maxconn':33333333333}}]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值