Python基礎-----實現文件的增刪改查
阿新 • • 發佈:2018-10-04
== delete imp strip() style one != 遇到 ret
實現文件的增刪改查
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import os 4 def file_handler(backend_data,res = None,type = ‘fetch‘): #文件處理函數 5 if type == ‘fetch‘: #查詢操作 6 with open(‘haproxy.conf‘,‘r‘) as read_f: 7 tag = False #初始狀態標識 8 ret = [] #用於放置查詢結果 9 for read_line in read_f: 10 if read_line.strip() == backend_data: #用strip()去除讀取的末尾回車、空格 11 tag = True 12 continue #查詢到需要查詢的數據則繼續執行下次循環 13 if tag and read_line.startswith(‘backend‘):break #防止跳到下一條記錄(以backend開頭的)14 if tag: 15 print(read_line,end = ‘‘) 16 ret.append(read_line) 17 else: 18 print(‘未查詢到你所要找的記錄!‘) 19 return ret 20 elif type == ‘change‘: 21 with open(‘haproxy.conf‘,‘r‘) as read_f,22 open(‘haproxy.conf_new‘,‘w‘) as write_f: #因為文件沒有修改一說,所以相當於創建副本 23 tag = False #狀態標識 24 has_write = False #用於標記已經寫入的內容 25 for read_line in read_f: 26 if read_line.strip() == backend_data: 27 tag = True 28 write_f.write(‘%s\n‘%backend_data) #寫入需要修改的backend標題 29 continue 30 if tag and read_line.startswith(‘backend‘): #防止跳到下一條記錄(以backend開頭的) 31 tag = False #遇到其他backend記錄,不會出現修改 32 if not tag: #尚未讀取到需要修改的部分,則直接讀寫 33 write_f.write(read_line) 34 else: 35 if not has_write: 36 for record in res: 37 write_f.write(record) 38 has_write = True #將修改的內容全部寫好,則改變已經寫入的狀態 39 os.rename(‘haproxy.conf‘,‘haproxy.conf.bak‘) #將原文件備份為備份文件 40 os.rename(‘haproxy.conf_new‘,‘haproxy.conf‘) #覆蓋原文件 41 def fetch(data): #查詢 42 print(‘查詢的數據為:%s‘%data) 43 backend_data = ‘backend %s‘ %data #拼接出關鍵詞 44 return file_handler(backend_data) 45 46 47 def add(data): #添加 48 pass 49 def change(data): #修改 50 backend = data[0][‘backend‘] #文件中的一條記錄www.oldboy1.org,需要修改,先執行查找,如果沒有,則不能修改 51 backend_data = ‘backend %s‘%backend #backend www.oldboy1.org 52 old_server_record = ‘%sserver %s weight %s maxconn %s\n‘%( 53 ‘ ‘*8,data[0][‘record‘][‘server‘], 54 data[0][‘record‘][‘weight‘], 55 data[0][‘record‘][‘maxconn‘], 56 ) 57 new_server_record = ‘%sserver %s weight %s maxconn %s\n‘%( 58 ‘ ‘*8,data[1][‘record‘][‘server‘], 59 data[1][‘record‘][‘weight‘], 60 data[1][‘record‘][‘maxconn‘], 61 ) 62 print(‘用戶想要修改的記錄是:‘,old_server_record) 63 res = fetch(backend) #返回指定backend記錄的列表 64 if not res or old_server_record not in res: #沒找到(1 backend沒找到 2 server沒找到) 65 return ‘你要修改的記錄不存在!‘ 66 else: 67 index = res.index(old_server_record) 68 res[index] = new_server_record #獲取到修改的值列表 69 return file_handler(backend_data,res = res , type = ‘change‘) 70 def delete(): #刪除 71 pass 72 73 74 if __name__ == ‘__main__‘: #執行可執行的語句 75 msg = ‘‘‘ 76 1:查詢 77 2:添加 78 3:修改 79 4:刪除 80 5:退出 81 ‘‘‘ 82 msg_dic = { 83 ‘1‘ : fetch, 84 ‘2‘ : add, 85 ‘3‘ : change, 86 ‘4‘ : delete 87 } 88 while True: 89 print(msg) 90 choice = input(‘請輸入你的選項:‘).strip() 91 if not choice : continue #用戶輸入為空時 92 if choice == ‘5‘:break #輸入5則退出程序 93 94 if choice != ‘1‘: 95 data = eval(input(‘輸入數據:‘).strip()) #有用戶輸入,並過濾掉前後空格及回車;在修改增加等操作傳入的是字典格式 96 fetch_res = msg_dic[choice](data) #根據選項字典獲取函數名,加()則運行相關選項函數 97 else: 98 data = input(‘輸入數據:‘).strip() #有用戶輸入,並過濾掉前後空格及回車;在修改增加等操作傳入的是字典格式 99 fetch_res = msg_dic[choice](data) #根據選項字典獲取函數名,加()則運行相關選項函數
Python基礎-----實現文件的增刪改查