问题描述
|
我不确定我的循环结构是什么问题。也许这是一个命名问题,因为count变量和SubElement名称使用相同的变量。任何帮助表示赞赏。
from xml.etree import ElementTree as ET
root = ET.Element(\"painter\")
root.set(\'version\',\'1.0\')
linenum = 0
pointnum = 0
smpl_data = [[[20,40],(0,1,1)],[[10,50],[[78,89],1)]]
while linenum <= len(smpl_data): #smpl_data change to self.lines
elem_line = ET.SubElement(root,\"line\" + str(linenum),attrib={\"r\": \"1\",\"g\": \"2\",\"b\": \"3\",\"a\": \"4\"})
elem_line.set(\"r\",smpl_data[linenum][1][0])
print elem_line.attrib.get(\"r\")
elem_line.set(\"g\",smpl_data[linenum][1][1])
print elem_line.attrib.get(\"g\")
elem_line.set(\"b\",smpl_data[linenum][1][2])
print elem_line.attrib.get(\"b\")
print elem_line.get(\"a\")
elem_line.set(\"a\",smpl_data[linenum][1][3])
print elem_line.attrib.get(\"a\")
for pointnum in linenum:
elem_point = ET.SubElement(\"line\" + str(linenum),\"point\" + str(pointnum),attrib={x: \"10\",y: \"20\"})
print elem_point
print elem_point.get(\"x\")
elem_point.set(\"x\",smpl_data[linenum][0][0])
print elem_point.attrib.get(\"x\")
print elem_point.get(\"y\")
elem_point.set(\"y\",smpl_data[linenum][0][1])
print elem_point.attrib.get(\"y\")
pointnum = pointnum + 1
linenum = linenum + 1
当它尝试开始遍历内部循环时,对于linenum中的pointnum,我得到了正确的错误。不知道为什么吗?
抱歉,不清楚。
这是完整的错误:
Traceback (most recent call last):
File \"C:\\Users\\joel\\Desktop\\open-autism-software\\software\\asd\\pen\\writexml.py\",line 57,in <module>
for pointnum in linenum:
TypeError: \'int\' object is not iterable
我在整个程序中的目标是能够将所有特定的(x,y)点作为属性添加到其各自的SubElement(行)中。每行都附加到主根。但是,(x,y)点的数目对于我的持久数据是可变的,因为每行的长度可以不同。
XML文档应如下所示:
<root>
<line r=\"0\",g=\"0\",b=\"1\",a=\"1\">
<point x=\"20\" y=\"30\">
<point x=\"10\" y=\"15\">
<point x=\"15\" y=\"25\">
...
</line>
<line r=\"0\",g\"1\",a=\"1\">
...
</line>
...
</root>
解决方法
你可能想要
for pointnum in range(linenum):
也就是说,所有数字从零到1比行号小
, linenum
不可迭代。很难说出您要在这里做什么,但也许5英镑就是您想要的?