我想更正一个脚本。但我的头是嵌套的。所以我想问问。更正Python中的打印项目
脚本是:
from xml.dom.minidom import parse
from itertools import groupby
yXML = parse('/root/Desktop/gb/data/yConfig.xml')
servers = []
for AllConfigurations in yXML.getElementsByTagName('AllConfigurations'):
for DeployConfigurations in AllConfigurations.getElementsByTagName('DeployConfigurations'):
for Servers in DeployConfigurations.getElementsByTagName('Servers'):
for Group in Servers.getElementsByTagName('Group'):
for GApp in Group.getElementsByTagName('GApp'):
for Server in Group.getElementsByTagName('Server'):
servers.append((Server.getAttribute('name'),
Group.getAttribute('name'),
Server.getAttribute('ip'),
GApp.getAttribute('type')))
def line(machine, group, ip, services):
return " | ".join([machine.ljust(22), group.ljust(22), ip.ljust(18), services])
print line("Machine", "Group", "IP", "Services")
print line("----------", "----------", "----------", "----------")
for server, services in groupby(sorted(servers), lambda server: server[0:3]):
print line("- " + server[0], server[1], server[2],
", ".join(service[3] for service in set(services)))
XML是:
<AllConfigurations>
<DeployConfigurations>
<Servers>
<Group id="1" name="The Perfect Life" username="root" password="mypasswd123" state="">
<GApp id="1" name="JBoss Servers" type="JBoss" path="/root/Desktop/jboss-as-7.0.2.Final/" state="">
<Server id="1" name="Jboss1" ip="192.168.1.250" path="/root/Desktop/jboss-as-7.0.2.Final/" username="" password="" state="" />
<Server id="2" name="Jboss2" ip="192.168.1.251" path="/root/Desktop/jboss-as-7.0.2.Final/" username="" password="" state="" />
<Server id="3" name="Jboss3" ip="192.168.1.252" path="/root/Desktop/jboss-as-7.0.2.Final/" username="" password="" state="" />
<Server id="4" name="Jboss4" ip="192.168.1.253" path="/root/Desktop/jboss-as-7.0.2.Final/" username="" password="" state="" />
</GApp>
<GApp id="2" name="Tomcat Servers" type="Tomcat" path="/root/Desktop/apache-tomcat-7.0.22/" state="">
<Server id="1" name="Tom1" ip="192.168.1.250" path="/root/Desktop/apachee/" username="" password="" state="" />
<Server id="2" name="Tom2" ip="192.168.1.251" path="/root/Desktop/apache-tomcat-7.0.22/" username="" password="" state="" />
<Server id="3" name="Tom3" ip="192.168.1.252" path="/root/Desktop/apache-tomcat-7.0.22/" username="" password="" state="" />
<Server id="4" name="Tom4" ip="192.168.1.111" path="/root/Desktop/apache-tomcat-7.0.22/" username="" password="" state="" />
</GApp>
</Group>
</Servers>
</DeployConfigurations>
</AllConfigurations>
电流输出是:
Machine | Group | IP | Services
---------- | ---------- | ---------- | ----------
- Jboss1 | The Perfect Life | 192.168.1.250 | Tomcat, JBoss
- Jboss2 | The Perfect Life | 192.168.1.251 | Tomcat, JBoss
- Jboss3 | The Perfect Life | 192.168.1.252 | JBoss, Tomcat
- Jboss4 | The Perfect Life | 192.168.1.253 | JBoss, Tomcat
- Tom1 | The Perfect Life | 192.168.1.250 | JBoss, Tomcat
- Tom2 | The Perfect Life | 192.168.1.251 | Tomcat, JBoss
- Tom3 | The Perfect Life | 192.168.1.252 | JBoss, Tomcat
- Tom4 | The Perfect Life | 192.168.1.111 | JBoss, Tomcat
的问题是:
1 - 正如你在Tom4看192.168上没有JBoss服务器。 1.111。该服务器仅适用于Tomcat。 Jboss4只有JBoss(253),其他(250,251,252)都有。服务部分不起作用。
2- IP打印多次。我不能处理它...
3-和机器列...
他们都必须是这样的:
Machine | Group | IP | Services
---------- | ---------- | ---------- | ----------
- Jboss1/Tom1 | The Perfect Life | 192.168.1.250 | JBoss, Tomcat
- Jboss2/Tom2 | The Perfect Life | 192.168.1.251 | JBoss, Tomcat
- Jboss3/Tom3 | The Perfect Life | 192.168.1.252 | JBoss, Tomcat
- Jboss4 | The Perfect Life | 192.168.1.253 | JBoss
- Tom4 | The Perfect Life | 192.168.1.111 | Tomcat
所以,我应该怎么办?
感谢
你应该蒸馏这个例子。在解析XML之后打印出您的`servers` var,然后重新发布刚刚设置`servers = ...`的代码,并跳过与您的问题无关的整个XML解析部分。 – dkamins 2011-12-17 00:27:02
我不知道你在说什么实际上。如果我跳过解析会怎么样?我可以按顺序打印其他300台服务器吗? – nightrider84 2011-12-17 00:30:18