我尝试用Python编写一个脚本,该脚本会自动生成其中包含一些信息的XML文件。
所以我陷入了困境。我有6个子元素。子元素的文本可以是0或1。 我想打印这6种元素的所有可能性。
我所拥有的:
listTCPFlag["fin","syn","rst","psh","ack","urg"]
lustTCPFlagAnswer = [0,1]
listProtocol = ['TCP','UDP','ICMP']
top = Element('Test')
ipHeader = SubElement(top, 'IpHeader')
ipProtocol = SubElement(ipHeader,'protocol')
for x in range(len(listProtocol)):
ipProtocol.text = str(listProtocol[x])
if(ipProtocol.txt == "TCP"):
tcpHeader = SubElement(top, "tcpHeader")
tcpPort = SubElement(tcpHeader,"destPort")
tcpFlag = SubElement(tcpHeader, "flag")
tcpFlagFin = SubElement(tcpFlag, "fin")
tcpFlagSyn = SubElement(tcpFlag, "syn")
tcpFlagRst = SubElement(tcpFlag, "rst")
tcpFlagPsh = SubElement(tcpFlag, "psh")
tcpFlagAck = SubElement(tcpFlag, "ack")
tcpFlagUrg = SubElement(tcpFlag, "urg")
# I tried to implement this in a for loop:
for z in range(len(listTCPFlag)):
for u in range(len(listTCPFlagAnswer)):
if(listTCPFlag[z] == "fin"):
tcpFlagFin.text = str(listTCPFlagAnswer[u])
# ...
经过仔细的考虑和测试,我发现循环是错误的。.现在我陷入了思想空白,不知道如何解决此问题。。我的输出应为:
示例:
<root>
<element_1> 0 </element_1>
<element_2> 0 </element_2>
<element_3> 0 </element_3>
<element_4> 0 </element_4>
<element_5> 0 </element_5>
<element_6> 0 </element_6>
</root>
<root>
<element_1> 0 </element_1>
<element_2> 0 </element_2>
<element_3> 0 </element_3>
<element_4> 0 </element_4>
<element_5> 0 </element_5>
<element_6> 1 </element_6>
</root>
<root>
<element_1> 0 </element_1>
<element_2> 0 </element_2>
<element_3> 0 </element_3>
<element_4> 0 </element_4>
<element_5> 1 </element_5>
<element_6> 0 </element_6>
</root>
<root>
<element_1> 0 </element_1>
<element_2> 0 </element_2>
<element_3> 0 </element_3>
<element_4> 1 </element_4>
<element_5> 0 </element_5>
<element_6> 0 </element_6>
</root>
....
(最终)
<root>
<element_1> 1 </element_1>
<element_2> 1 </element_2>
<element_3> 1 </element_3>
<element_4> 1 </element_4>
<element_5> 1 </element_5>
<element_6> 1 </element_6>
</root>
之后,我尝试使用“ add_binary_nums(x,y)”功能。像这样:https://www.w3resource.com/python-exercises/challenges/1/python-challenges-1-exercise-31.php
就我的观点,我更喜欢一个可以处理的for循环。但是我不知道如何构建。我如何在Python 2和For-loop中以简单的方式做到这一点?
答案 0 :(得分:1)
我想到的最简洁的方法是编写一个for
循环,该循环遍历从0
到63
(2^6 - 1
)的二进制文件,因为它会从000000
到111111
。然后将每个数字分解为各个数字,并将每个数字放入您的<element>
标签之一中。
这是一个例子:
all_possibilities = []
for n in range(2**6):
binary = format(n, '06b')
tcp_flag_elements = []
for i in range(len(binary)):
subelement = SubElement(tcpFlag, listTCPFlag[i])
subelement.text = binary[i]
tcp_flag_elements.append(subelement)
all_possibilities.append(tcp_flag_elements)
这将为您提供列表all_possibilities
,其中包含64个列表,每个子元素可能的配置都一个。