首页 > 编程语言 > 详细

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

时间:2019-03-30 18:07:11      阅读:137      评论:0      收藏:0      [点我收藏+]
  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(输入有误)
View Code

 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

 

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

原文:https://www.cnblogs.com/xieyi5420/p/10628018.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!