根据python中的用户输入创建多个文件

时间:2017-06-05 09:35:41

标签: python python-3.x file templates

我是python的新手,我编写了一个代码,为我的应用程序创建配置文件。我已经创建了适用于2个IP的代码,但可能会发生用户可能输入更多IP的情况,并且对于Ip的每次增加,配置文件都将被更改。有认证服务器,它们只能是1或2。

我通过文件名“inputfile”将输入传递给python代码,下面是它的样子:

EnterIp_list: ip_1 ip_2
authentication_server: as_1 as_2

以下是最终配置文件的创建方式:

configfile1:                  configfile2:
App_ip: ip_1                  App_ip: ip_2
app_number: 1                 app_number: 2
authen_server: as_1           authen_server: as_2

下面是python3代码的外观:

def createconfig(filename, app_ip, app_number, authen_server)
     with open(filename, 'w') as inf:
          inf.write("App_ip=" + app_ip + "\n")
          inf.write("app_numbber=" + app_number)
          inf.write("authen_server="+ authen_server)


with open("inputfile") as f:
     for line in f:
       if EnterIP_list in line:
          a= line.split("=")
          b = a[1].split()
       if authentiation_server in line:
          c= line.split("=")
          d=c[1].split()

createconfig(configfile1, b[0], 1, d[0])
createconfig(configfile2, b[1], 2, d[1])

用户可以自由输入任意数量的IP。有人可以建议需要做些什么来使代码更通用和健壮,以便它可以适用于任何数量的输入IP的???每增加一个新的ip,app_number的值也会增加。

总会有两个身份验证服务器,它们会循环播放,例如第三个app ip将再次与“as_1”关联。

2 个答案:

答案 0 :(得分:0)

您只需要在b中遍历您的ip列表,请注意您当前的代码仅适用于“inputfile”的最后一行。只要只有一条线就可以了。

with open("inputfile") as f:
     for line in f:
        a= line.split("=")
        b = a[1].split()

app_count = 1
for ip in b:
    createconfig("configfile%s" % app_count , ip, app_count)
    app_count += 1

编辑:有关您的代码更改的解决方案已更新。

with open("inputfile") as f:
     for line in f:
       if EnterIP_list in line:
          ips = line.split("=")[1].split()
       if authentiation_server in line:
          auth_servers = line.split("=")[1].split()

app_count = 1
for ip, auth_server in zip(ips, auth_servers):
    createconfig("configfile%s" % app_count , ip, app_count, auth_server)
    app_count += 1

答案 1 :(得分:0)

在不修改代码的情况下执行此操作的一种不太好的方法是删除最后两个createconfig()调用,而是在b之后执行循环,如下所示:

with open("inputfile") as f:
 for line in f:
    a= line.split("=")
    b = a[1].split()

for app_number in b:
    createconfig("configfile{}".format(app_number), b[app_number], app_number)