-1

不完全确定如何问这个问题,但它就在这里。

我有一个空白列表

我想将一个元素添加到列表中的列表中。

因此,就我而言,我正在通过 apache.conf 查找包含 ServerAlias 的任何行。

如果找到它,我想将该行添加到子列表的最后一个元素中。所以....

[['ServerAlias test.com']]

如果它在特定虚拟主机中找到另一个条目,它将将该项目添加到同一子列表中。

[['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

希望有人知道我在说什么。圣诞节快乐!

4

1 回答 1

1

serveralias[0[0]]不是你想要的表达方式。这意味着'取第 0 项0,然后将其用作键以从serveralias' 中获取值。TypeError每当 Python 尝试评估该表达式时,您都会得到一个,因为 0 是不可索引的。

如果您实际上想要获取列表第 0 项的第 0 项,则需要将该表达式替换为serveralias[0][0]. 但是您甚至不想这样做;您只想附加到serveralias.

所以serveralias[0[0]].append(foo)serveralias[0].append(foo)serveralias[-1[0]].append(foo)替换serveralias[-1].append(foo)

不知道代码中是否还有其他问题,我没有仔细看。

于 2012-12-25T21:39:09.440 回答