2012-12-25 31 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我的不好。我回答时没有注意到;找到了问题,但提供了错误的解决方法。我已经解决了我的答案。 –