zoukankan      html  css  js  c++  java
  • python3配置文件的增删改查,记录一下

      1 #!/usr/bin/env python3
      2 
      3 import json             #json模块,用于将像字典的字符串转换为字典
      4 import re               #re模块,查找替换
      5 import shutil           #copy文件用
      6 shutil.copyfile('conf','conf.bak') #shutil.copyfile(文件1,文件2):不用打开文件,直接用文件名进行覆盖copy。
      7 #全局变量函数
      8 def env():
        global user_dic,insert_addr,server,weight,maxconn,insert_conf,rec,ser,wei,max #global定义全局变量,这样函数外也能调用该变量
        user_dic = json.loads(user_input)  # 将用户输入类似字典字符串转换为字典
        insert_addr = list(user_dic.items())[0][0] + ' ' + list(user_dic.items())[0][1]  # 将用户输入信息第一个keys和values取出来
        rec = list(user_dic.keys())[1]
        ser = list(user_dic[rec].keys())[0]
        wei = list(user_dic[rec].keys())[1]
        max = list(user_dic[rec].keys())[2]
        if rec in user_dic.keys():
            if ser in user_dic[rec].keys():
                server = user_dic[rec][ser]
            if wei in user_dic[rec].keys():
                weight = user_dic[rec][wei]
            if max in user_dic[rec].keys():
                maxconn = user_dic[rec][max]
            insert_conf = '%s %s %s %s %s %s %s' % (ser, server, server, wei, weight, max, maxconn)  # 将信息格式化
        else:
            print('输入有误')
    env
    
    
     26 #将文件加入列表函数
     27 def list_lines():
        global lines
        with open('conf.bak', 'r') as f:
            for line in f:
                f.seek(0)  # 文件指针指定为0开始
                lines = f.readlines()  # 将文件每行读取到列表lines中,包括换行符
    和缩进	。
    View Code
    
    
     33 #判断是否是json格式函数
     34 def check_json_format():
        try:
            json.loads(user_input,encoding='utf-8')   #检测user_input是否是json格式,不是则异常
        except ValueError:       #异常报错,如没有异常这条永远不走
            return False          #异常报错返回False
        return True             #没有异常返回True
    View Code
     40 #判断字符串是否为数字函数

    41 def isnub(s):
        try:
            nb = float(s) #将字符串转换成数字成功则返回True
            return True
        except ValueError as e:
            return False #如果出现异常则返回False
    View Code
    
    
     47 #索引值是否存在函数
     48 def if_index():
        try:
            lines.index(insert_index)
            return False
        except ValueError:
            return True
    View Code
     54 #判断输入不能为空
     55 def if_else():
        if len(user_input) == 0:
            print('输入不能为空,请重新输入!')
            return True
        else:
            print('输入有误,请输入json格式字符串!')
            return False
    View Code
     62 #输出文件变化
     63 def change():
        with open('conf', 'r') as f:
            print('修改之前:')
            for line in f:
                if insert_addr in line:
                    print(line + next(f))
        with open('conf', 'r') as f:
            print('修改之后:')
            for line in f:
                if insert_addr in line:
                    print(line + next(f) + next(f))
    View Code
     74 #配置文件增加函数
     75 def increase_conf():
        global user_input,insert_index
        while True:
            user_input = input('输入要增加配置文件内容:').strip()
            if check_json_format() and isnub(user_input) == False:    #如果json判断函数返回True,则为json格式
                env()
                list_lines()
                if insert_addr+'
    ' in lines:
                    insert_index = lines.index(insert_addr+'
    ')  # 获取insert_addr+
    在列表lines中的索引位置
                    if if_index():
                        lines.insert(insert_index + 2, '        ' + insert_conf + '
    ')  # 在列表中指定索引位置插入信息
                        with open('conf', '+w') as conf:
                            conf.write(''.join(lines))  # join将列表内容写入文件中以''隔开,也可以以'
    '隔开
                        print('已将%s添加到conf文件中'%(insert_conf))
                        change()
                        return True
                    else:
                        print('%s在conf文件中不存在'%(insert_addr))
                        return False
                else:
                    print('%s在conf文件中不存在'%(insert_addr))
                    return False
            if if_else():
                continue
            else:
                continue
    View Code
    101 #配置文件删除函数
    102 def del_conf():
       global user_input,insert_index
        while True:
            user_input = input('请输入需要删除配置信息:').strip()
            if check_json_format() and isnub(user_input) == False:  # 如果json判断函数返回True,则为json格式
                env()
                list_lines()
                if insert_addr + '
    ' in lines:
                    if '        '+insert_conf+'
    ' in lines:
                        insert_index = lines.index('        '+insert_conf+'
    ')
                        if if_index():
                            del[lines[insert_index]]
                            with open('conf', '+w') as conf:
                                conf.write(''.join(lines))  # join将列表内容写入文件中以''隔开,也可以以'
    '隔开
                            return True
                        else:
                            print('%s %s %s %s %s %s %s在文件conf中不存在'%(ser, server, server, wei, weight, max, maxconn))
                            continue
                    else:
                        # print('%s不存在conf中'%(insert_conf))
                        print('%s %s %s %s %s %s %s在文件conf中不存在' % (ser, server, server, wei, weight, max, maxconn))
                        continue
                else:
                    print('%s在文件conf中不存在'%(insert_addr))
                    continue
            if if_else():
                continue
            else:
                continue
    View Code
    131 #配置文件修改函数
    132 def modify_conf():
       global user_input
        while True:
            user_input = input('请输入需要修改的内容:').strip()
            if check_json_format() and isnub(user_input) == False:  # 如果json判断函数返回True,则为json格式
                env()
                list_lines()
                if insert_addr+'
    ' in lines:
                    if '        '+insert_conf+'
    ' in lines:
                        while True:
                            user_input =  input('需要修改为:').strip()
                            if len(user_input) == 0:
                                print('输入不能为空,请重新输入!')
                                continue
                            else:
                                open('conf', 'w').write(re.sub(insert_conf, user_input,open('conf.bak').read()))#读取文件conf.bak中
                                # insert_conf替换为user_input,这里re.sub是查找替换,正则表达式。
                                print('已将:%s
    '
                                      '修改为:%s'%(insert_conf,user_input))
                                return True
            if if_else():
                continue
            else:
                continue
    View Code
    156 #配置文件查看函数
    157 def see_conf():
        while True:
            user_input = input('请输入需要查找的内容:').strip()
            if len(user_input) == 0:
                print('输入不能为空,请重新输入')
                continue
            else:
                with open('conf','r') as f:
                        for line in f:
                            if user_input in line.strip():
                                print(line)
                                print(next(f))
                                return
                        else:
                            print('无法查找')
                            return
    View Code
    173 while True:
    174     print('1、%s 2、%s 3、%s 4、%s'%('增加','删除','修改','查看'))
    175     user_input = input('请选择对配置文件的动作:').strip()
    176     if len(user_input) == 0:
    177         print('输入不能为空,请重新输入!')
    178         continue
    179     if user_input == '1' or user_input == '增加':
    180         increase_conf()
    181         break
    182     if user_input == '2' or user_input == '删除':
    183         del_conf()
    184         break
    185     if user_input == '3' or user_input == '修改':
    186         modify_conf()
    187         break
    188     if user_input == '4' or user_input == '查看':
    189         see_conf()
    190         break
    191     else:
    192         print('输入有误')
    193         continue
  • 相关阅读:
    重构的信号
    枚举类返回Map键值对,绑定到下拉框
    js onclick函数中传字符串参数的问题
    python opencv3 矩形 圆形边框
    python opencv3 轮廓检测
    python opencv3 滤波器 卷积核
    python opencv3 窗口显示摄像头的帧
    python opencv3 显示一张图片
    python opencv3 获取摄像头视频
    python opencv3 视频文件的读写
  • 原文地址:https://www.cnblogs.com/xieyi5420/p/10628018.html
Copyright © 2011-2022 走看看