2017-06-05 118 views
1

我是python的新手,我寫了一個代碼來爲我的應用程序創建配置文件。我已經創建了適用於2個IP的代碼,但可能會發生這樣的情況:用戶可能會輸入更多的IP,並且對於Ip中的每次增加,配置文件將被更改。有驗證服務器,它們只能是1或2。根據python中的用戶輸入創建多個文件

我傳遞輸入到Python代碼通過一個文件名「inputfile中」,下面是它的樣子:

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的值也會增加。

總會有兩個身份驗證服務器,他們會循環查看,例如第三個應用程序IP將再次與「as_1」關聯。

回答

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 
+0

嗨,非常感謝您的回答,但是我的代碼使用了更多的變量,這些變量在前面的描述中沒有提及。我已經更新了我的描述,可以請檢查嗎? –

+0

解決方案已更新爲包含authentication_server。 – olisch

0

一個不那麼偉大的方式是刪除最後兩個createconfig()調用,而是做一個循環,一旦你有進行如下操作:

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) 
+0

嗨,非常感謝您的回答,但我的代碼使用了更多的變量,這在我之前的描述中沒有提到。我已經更新了我的描述,可以請檢查嗎? –

相關問題