python文件实现增删改查操作

  1 # coding = utf-8
  2 
  3 import os
  4 import json
  5 import re
  6 '''
  7 本程序旨在将练习基础知识部分,包括:
  8 列表,元组,字典,文件,函数,字符串等知识
  9 实现的功能:
 10 1.查询
 11 2.删除
 12 3.更改
 13 4.增加
 14 '''
 15 
 16 #定义的文档存储格式
 17 mes_style = '''bankend    www.baidu.org
 18            server 192.168.50.21   wight 100   maxconn 300
 19 bankend    www.oldboy.org
 20            server 192.168.99.31   wight 50   maxconn 100\n
 21 '''
 22 
 23 #用户只能修改这些字段的值
 24 updateable ={
 25     1:"server",
 26     2:"wight",
 27     3:"maxconn"
 28 }
 29 
 30 #菜单
 31 menu_info = '''
 32 1.查询
 33 2.删除
 34 3.修改
 35 4.添加
 36 5.退出
 37 '''
 38 
 39 
 40 
 41 #展示菜单
 42 def show_menu():
 43     '''
 44     to display the menu ,I chosed the str to show it
 45 
 46     '''
 47     print(menu_info)
 48 
 49 #初始化操作,往文件里边添加格式文件
 50 def before_start():
 51     '''
 52     before start,you can call this func to create a file
 53     and then you should explanatory(注释) this method before calling
 54     the main method
 55     '''
 56     f = open("web.property","a+",encoding="utf-8")
 57     for i in mes_style:
 58         f.writelines(i)
 59     f.close()
 60 #before_start()
 61 #查询记录
 62 def search(user_enter):
 63     '''
 64     this function can be used when search function needed
 65    user can select the listed item and then,the corresponding
 66    entry will be display
 67     '''
 68     #查询并打印出用户查询关键字所在的行和下一行
 69     f = open("web.property","r",encoding="utf-8")
 70     list = f.readlines()
 71     for i,line in enumerate(list):
 72         if user_enter in line:
 73             print(line)
 74             print(list[i+1])
 75         elif i == len(list)-1:
 76             print("查无结果")
 77     f.close()
 90 
 91 #查出所有的文件内容,并包装成字典返回
 92 def searchall():
 93     '''
 94     this function is a common function ,it can used in delete and update,so add
 95     '''
 96     f = open("web.property", "r", encoding="utf-8")
 97     list = f.readlines()
 98     #用来存储找到value为空所对应的key
 99     list1 =[]
100     mapc = {}
101     for i,line in enumerate(list):
102         if line == "\n" or line == "":
103             list.pop(i)
104     for i in range(0,len(list),2):
105         mapc[int(i/2)+1] =list[i:i+2]
106     f.close()
107     return mapc
108 #删除
109 def delete():
110     '''
111     this function is used to delete the record user selected
112     '''
113     flag = True
114     while flag:
115         maps = searchall()
116         for i in maps.items():
117             print(i)
118         user_selected = input("请选择要删除的对象(输入b返回):")
119         if user_selected.isdigit():
120             user_selected = int(user_selected)
121             #print(list)
122             for j in maps.keys():
123                 if user_selected == j:
124                     temp = j
125             for m in maps.items():
126                 if user_selected == m:
127                     temp = m
128                     #删除文件中对应的该条记录
129                     for line in list(maps.keys()):
130                         if temp== line:
131                             maps.pop(temp)
132                             file_path = "C:/Users/Administrator/PycharmProjects/pythondemo/web.propertybak"
133                             if os.path.exists(file_path):
134                                 os.remove(file_path)
135                             os.renames("web.property", "web.propertybak")
136                             f6 = open("web.property", "w")
137                             for line in maps.values():
138                                 f6.write(line[0])
139                                 f6.write(line[1])
140                             f6.close()
141                             break
142                         else:
143                             break
144                     print(maps)
145                     #询问是否继续
146                     conti = input("是否继续删除?(y/n):")
147                     if conti == "y":
148                         continue
149                     else:
150                         flag = False
151                         break
152         elif user_selected == "b":
153             break
154         else:
155             print("输入有错误,请重新选择")
156 
157 
158 #添加
159 def add():
160     '''
161     you can execute add funciton to add a node to file
162     but you should according to those forms
163     1:"server",
164     2:"wight",
165     3:"maxconn"
166     '''
167     #regs ={"bankend":"www.\w.com","server":"\d.\d.\d.\d"}
168 
169 
170     while True:
171         print("请依次填入下列选项中的值")
172         bankend = input("bankend:")
173         server = input("server:")
174         wight = input("wight:")
175         maxconn = input("maxconn:")
176         # 正则表达式检查输入是否符合格式要求
177         if re.compile(r"www\.(\w+)(\.com|\.cn|\.org|\.net)").match(bankend):
178             print("bankend ok")
179             if re.compile(r"\d+\.\d+\.\d+\.\d").match(server):
180                 print("server ok")
181                 if re.compile(r"\d").match(wight):
182                     print("wight ok")
183                     if re.compile(r"\d").match(maxconn):
184                         print("maxconn ok")
185                         #条件都符合
186                         write_date =["bankend    %s\n"%bankend,"           server %s   wigth %d   maxconn %d"%(server,int(wight),int(maxconn))]
187                         f = open("web.property", "a", encoding="utf-8")
188                         for line in write_date:
189                             f.writelines(line)
190                         f.close()
191                         break
192                     else:
193                         print("maxconn invalid")
194                         continue
195                 else:
196                     print("wight invalid")
197                     continue
198             else:
199                 print("server invalid")
200                 continue
201         else:
202             print("bankend invalid")
203             continue
204 
205 
206 #更新
207 def update():
208     '''
209     this function is designed for update the file message,content
210     '''
211     state = 0
212     while True:
213         mapa = searchall()
214         for i,m in enumerate(mapa):
215             print(str(i+1)+"."+str(mapa[m]))
216         it = input("请选择要更改的条目:(b 返回)")
217         if it.isdigit():
218             it = int(it)
219             for i in mapa.keys():
220                 if it == i:
221                     print("check pass")
222                     while True:
223                         for member in updateable:
224                             print(str(member)+":"+updateable[member])
225                         user_se = input("请选择要修改的字段(按b返回):")
226                         if user_se.isdigit():
227                             user_se =int(user_se)
228                             for j in updateable.keys():
229                                 if user_se == j:
230                                     print("check pass2")
231                                     while True:
232                                         update_to = input("请输入值:")
233                                         if update_to==None or update_to=="":
234                                             pass
235                                         else:
236                                             break
237                                     print(user_se)
238                                     #获得选择的字段
239                                     map_attr = updateable[user_se]
240                                     li =[]
241                                     for  l in mapa[it]:
242                                         if map_attr in l:
243                                             li.append(l.split("   "))
244                                         print(l)
245                                     #print(li)
246                                     for i,ind in enumerate(li[0]):
247                                         if(map_attr in ind and map_attr == "server"):
248                                             ind = "           "+map_attr+" "+(str(update_to) if update_to.isdigit() else update_to)
249                                         elif (map_attr in ind ):
250                                             ind = "  " + map_attr + " " + (str(update_to) if update_to.isdigit()  else update_to)
251                                             li[0][i]=ind
252                                             break
253                                     #同步到mapa
254                                     final_str =""
255                                     for i in li[0]:
256                                         if "server" in i:
257                                             final_str += "          "+i+"   "
258                                         elif "wight" in i:
259                                             final_str +=i+"   "
260                                         else:
261                                             final_str += i
262                                     #print(final_str)
263                                     for i,n in enumerate(mapa[it]):
264                                         if "server" in n:
265                                             mapa[it][i] =final_str+"\n"
266                                     print(mapa)
267                                     with open("web.property","w") as f:
268                                         for line in mapa.values():
269                                             f.writelines(line)
270                                     f.close()
271                                     print(mapa)
272                                     print(li)
273                                     print("修改成功")
274                                     break
275                                 elif j == len(updateable):
276                                     print("不在选项内,请重新选择")
277                         elif user_se == "b":
278                             break
279                 elif i ==len(mapa):
280                     print("输入选项不在列表中,请重新选择")
281         elif it == "b":
282             state = 1
283             break
284         else:
285             print("输入有误")
286     if state == 1:
287         return
288 
289 #主程序
290 while True:
291     show_menu()
292     selected = input("请选择:(1,2,3,4,5):")
293     if selected.isdigit():
294         selected = int(selected)
295         if selected == 1:
296             search(input("请输入要查询的网址:"))
297         if selected == 2:
298             delete()
299         if selected == 3:
300             update()
301         if selected == 4:
302             add()
303         if selected == 5:
304             break
305     else:
306         print("你输入了其他字符,请输入数字")
307         continue

 

posted @ 2017-12-26 22:45  海的味道  阅读(3980)  评论(0编辑  收藏  举报