欢迎来到赛兔子家园

修改线上配置文件

修改线上配置文件

本例子是已txt为例,手动输入需要修改的原配置文件字段和修改后的新字段;

格式:已>>作为分隔符输入  例:原配置文件字段:config:True 想修改为config:Fase  输入格式:config:True>>config:Fase

本例子可以循环输入需要修改的值

实现思路:同时打开两个文件,一个原文件读,一个新文件写,遇到输入的修改值时更新且写入新文件中;

最后将新文件命名为旧文件名,将旧文件名修改为其它:

import os,random

class  ReadLineTest:
    def open_finame(self):
        while True:
            self.old_str,self.new_str=self.input_str()
            flag = False
            with open('old.txt','r+',encoding='utf-8') as old_read,open('new.txt','w+',encoding='utf-8') as new_add:
                for line in old_read:
                    if line.strip()=='':continue
                    elif self.old_str in line:
                        flag = True
                        line = line.replace(self.old_str,self.new_str)
                    new_add.write(line)
                if flag:
                    print("\033[42;1m将旧文件中{0}修改为:{1}成功\033[0m".format(self.old_str,self.new_str))

                else:
                    print("\033[31;1m修改字段在旧文件中不存在,请重新输入\033[0m")
                    continue
            want_to = input("是否继续:Y/N:").strip().upper()
            if want_to=="Y":
                self.revamp_old_filename()
            else:
                break

    def input_str(self):
        while True:
            print("\033[35;1m修改格式>>【前面是需要修改字段后面是修改后的字段】例如:Somehow:config>>新值Somehow:C://dirname\033[0m")
            input_all_text    = input("请输入需要更新值已修改值和新值已>>分隔:")
            try:
                old_text,new_text = input_all_text.split(">>")
                return old_text,new_text
            except Exception as error:
                print("\033[31;1m输入格式不正确,请重新输入\033[0m")


    def revamp_old_filename(self):
        inpu_exit = input("是否将新文件名重命名为线上旧文件名?:>>>>>>Y/N:").strip().upper()
        if inpu_exit=="Y":
            name = ''.join(random.sample(['a','b','c','d','e','f','g','h','A','C','E','x'],3))
            os.rename("old.txt","old{0}.txt".format(name))
            os.rename("new.txt","old.txt")
            print("\033[42;1m内容和文件名均修改成功\033[0m")
        else:
            print("\033[31;1m放弃修改\033[0m")
            exit()


if __name__ == '__main__':

    obj = ReadLineTest()
    obj.open_finame()
    obj.revamp_old_filename()

 

posted on 2018-06-11 12:30  赛兔子  阅读(504)  评论(0编辑  收藏  举报

导航