python之文件操作

文件的读取、修改、写入
知识点:不可以使用for循环生成变量,替代方式:将每次循环生成的数据添加到列表中,再对列表进行操作
例子:根据输入的环境名称操作hosts文件,注释掉其他环境

#env1
127.0.0.1
127.0.0.2

#env2
127.0.0.3
127.0.0.4

#env3
127.0.0.5
127.0.0.6

def choose_env():
    env = input("请输入环境名称:")
    key = '#'+env+'\n'
    host_list = []
    env_list = []

    with open('hosts.txt',mode='r') as fr:
        # 将每个环境切成一个列表
        l = fr.readlines()
        n = l.count('\n')
        # print('n',n)
        for i in range(n):
            host_list.append(l[:l.index('\n')+1])
            l = l[l.index('\n')+1:]
            host_list[i].remove('\n')
        host_list.append(l)

    # 如果输入不存在的环境名称,提示并退出
    for i in range(len(host_list)):
        env_list.append(host_list[i][0])
    # print(env_list)
    if key not in env_list:
        print("输入错误,环境不存在!")
        return
    # 寻找目标环境
    for i in range(len(host_list)):
        # 如果存在目标环境且被注释,解除注释
        if key in host_list[i]:
            if host_list[i][1].startswith('#'):
                for j in range(1,len(host_list[i])):
                    host_list[i][j] = host_list[i][j].replace('#','')
        # 如果非目标环境且已注释,跳过
        if key not in host_list[i] and host_list[i][1].startswith('#'):
            pass
        # 如果非目标环境且未注释
        if key not in host_list[i] and not host_list[i][1].startswith('#'):
            # 对列表进行注释
            for j in range(1, len(host_list[i])):
                host_list[i][j] = '#'+host_list[i][j]

    with open('hosts.txt','w') as fw:
        for i in range(len(host_list)):
            for j in range(len(host_list[i])):
                fw.write(host_list[i][j])
            if i+1<len(host_list):
                fw.write('\n')
    fw.close()
    print("修改成功!")



choose_env()

你可能感兴趣的:(考试,python,linux,服务器)