2012-12-25 62 views
-1

不完全知道如何問這個問題,但在這裏不言而喻的列表。項目添加到一個空表蟒蛇

我有一個空白列表

我想在列表中的元素添加到列表中。

所以在我的情況下,我期待通過的apache.conf尋找包含ServerAlias任何行。

如果它發現它,我想這行添加到子表的最後一個元素。 左右....

[['ServerAlias test.com']] 

如果發現在particuar虛擬主機另一個項目,將這個項目添加到同一子列表。

[['ServerAlias test.com','ServerAlias neww.com']] 

下一次它經歷新的虛擬主機。我想在列表末尾添加一個列表並重新開始。等等......

[['ServerAlias test.com','ServerAlias neww.com'],['ServerAlias cranberry.com']] 

我知道我做了一個可怕的工作來描述這個。

這裏是我的非工作代碼,以便它可能會有所幫助。

def buildvars(fileoutput): 
import time 
import re 
servername=[] 
docroot=[] 
serveralias=[[]] 
vhostdata={} 
invhost=0 
for line in fileoutput.split('\n'): 
    if line == '' or re.search('^#',line) or re.search('^\s+#',line): #delete blank lines... I dont care about them 
     pass 
    else: 
     if re.search('^\s*\<VirtualHost', line): #check if we are in a vhost 
      invhost=1 #mark that we are in a vhost 
      aliascounter=0 
     elif re.search('^\s*\</VirtualHost', line): 
      invhost=0 
      if aliascounter==0: 
       serveralias.append('None') 
     if invhost == 1: 
      if re.search('^\s*ServerName.*$',line): #if we are in a vhost, check if the line contains servername 
       servername.append(line.strip()) #then append it to the vhosts list 
      if re.search('^\s*DocumentRoot.*$',line): 
       docroot.append(line.strip()) 
      if re.search('^\s*ServerAlias.*$',line): 
       if not serveralias: 
        serveralias[0[0]].append(line.strip()) 
       else: 
        serveralias[-1[0]].append(line.strip()) 
        aliascounter+=1 

希望有人知道我在說什麼。聖誕節快樂!

+1

未來,請解釋什麼不起作用(例如發佈您正在觀察的異常或意外行爲),而不僅僅是傾銷所有代碼。在這種情況下,可以輕鬆地找到並修復至少部分問題,因爲代碼中存在明顯的錯誤(嘗試索引數字),但情況並非總是如此。還要嘗試創建最簡單的代碼片段,以說明您的問題,而不是發佈包含大量絨毛的代碼。如果你花了一些時間在這裏創建一個簡單的例子,你很可能解決了你自己的問題。 –

回答

1

serveralias[0[0]]是不是你想要的表達。這意味着'取第0號的第0項,然後用它作爲從serveralias得到值的關鍵'。每當Python嘗試評估該表達式時,您將得到TypeError,因爲0不可索引。

如果您確實想要獲取列表中第0項的第0項,您希望用serveralias[0][0]替換該表達式。但你甚至不想那樣做;你只需要追加到serveralias的第0項。

所以更換serveralias[0[0]].append(foo)serveralias[0].append(foo),並serveralias[-1[0]].append(foo)serveralias[-1].append(foo)

不知道是否有在代碼中任何其他問題,雖然,我沒仔細看。

+0

我做到了,但現在我的'列表索引超出範圍' – user1601716

+0

@ user1601716我的不好。我回答時沒有注意到;找到了問題,但提供了錯誤的解決方法。我已經解決了我的答案。 –