• Python基础-----实现文件的增删改查


    实现文件的增删改查

     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
    '%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
    '%(
    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
    '%(
    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)        #根据选项字典获取函数名,加()则运行相关选项函数
  • 相关阅读:
    C语言格式化字符串细节 --- %*s %*c %*.*s
    ROC曲线与AUC计算总结
    python 数字列表排序,输出对应的索引 | 转载
    python 类间的有趣调用
    Linux下以16进制形式显示文件内容的方法
    一些书签
    椭圆曲线算数原理与实现
    中国剩余定理来解密RSA密文
    在GridView控件内文本框实现TextChanged事件,勾选复选框时 :textbox文本框可编辑,编辑文本框的数字后 总金额会重新计算并统计
    关于RDLC子报表添加参数 错误“本地报表处理期间出错 。值不能为空。 参数名:value” 错误解决方法
  • 原文地址:https://www.cnblogs.com/Meanwey/p/9741296.html
Copyright © 2020-2023  润新知