文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python3配置文件的增删改查,记录一

2023-01-31 00:21

关注
  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中,包括换行符\n和缩进\t。
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+'\n' in lines:
                insert_index = lines.index(insert_addr+'\n')  # 获取insert_addr+\n在列表lines中的索引位置
                if if_index():
                    lines.insert(insert_index + 2, '        ' + insert_conf + '\n')  # 在列表中指定索引位置插入信息
                    with open('conf', '+w') as conf:
                        conf.write(''.join(lines))  # join将列表内容写入文件中以''隔开,也可以以'\n'隔开
                    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 + '\n' in lines:
                if '        '+insert_conf+'\n' in lines:
                    insert_index = lines.index('        '+insert_conf+'\n')
                    if if_index():
                        del[lines[insert_index]]
                        with open('conf', '+w') as conf:
                            conf.write(''.join(lines))  # join将列表内容写入文件中以''隔开,也可以以'\n'隔开
                        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+'\n' in lines:
                if '        '+insert_conf+'\n' 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\n'
                                  '修改为:%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

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯