我使用PY的ElementTree成功地向Element添加了一个新节点.我现在尝试给它属性,但是失败了,尽管我正在按照教程进行操作.
我的例子xml:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<level01>
<level02>
<level03>
<level04>
<node q="3,4,5,7,8" p="zen"/>
<node q="a,s,e,o,l" p="zen"/>
</level04>
</level03>
# >> here will be the new node, called <subi/> <<
<level03>
<level04>
<node q="x,y" p="zen"/>
<node q="xxx,yyy" p="zen"/>
</level04>
</level03>
</level02>
</level01>
</xml>
Run Code Online (Sandbox Code Playgroud)
节点的创建方式如下:
subi = ETL.SubElement(root[0][0][1][0][0], 'subi')
Run Code Online (Sandbox Code Playgroud)
哪个有效,然后可以通过root001000访问它,并且可以读取它的标签.
但我没有尝试添加属性.
我尝试使用我在另一个线程中找到的语法:(以我的名字命名)
>>> myattributes = {"size": "small", "gender": "unknown"}
>>> child = ET.SubElement(parent, "child", attrib=myattributes, age="10" )
Run Code Online (Sandbox Code Playgroud)
我也直接尝试过,比如说
subi = ETL.SubElement(root[0][0][1][0][0], 'subi', attrib={"size": "small", "gender": "unknown"})
Run Code Online (Sandbox Code Playgroud)
结果总是如此
root[0][0][1][0][0][0].tag
'subi'
Run Code Online (Sandbox Code Playgroud)
但
root[0][0][1][0][0][0].attrib
{} …Run Code Online (Sandbox Code Playgroud) 我收到了调试问题.
由于我在这里很新,请原谅可能的janky文本墙.
几个小时后我终于elementtree做了我想做的事,但我无法输出我的结果,因为
tree.write("output3.xml")
Run Code Online (Sandbox Code Playgroud)
以及
print(ET.tostring(root))
Run Code Online (Sandbox Code Playgroud)
给我
TypeError:无法序列化0.029999999999999999(类型为float64)
我不知道你们需要在这里帮助我,所有的源代码都很冗长.错误消息也是如此.但这有点容易,所以我在这里发布......
提前说明:
-------------------------------------------------- ------------------------- TypeError Traceback(最近一次调用last)in()----> 1 tree.write("output3.xml" ")
C:\ Anaconda\lib\xml\etree\ElementTree.pyc in write(self,file_or_filename,encoding,xml_declaration,default_namespace,method)818)819 serialize = _serialize [method] - > 820 serialize(write,self._root,编码,qnames,名称空间)821如果file_or_filename不是文件:822 file.close()
C:\ Anaconda\lib\xml\etree\ElementTree.pyc in _serialize_xml(write,elem,encoding,qnames,namespaces)937 write(_escape_cdata(text,encoding))938 for e in elem: - > 939 _serialize_xml(write ,e,编码,qnames,无)940写("")941其他:
C:\ Anaconda\lib\xml\etree\ElementTree.pyc in _serialize_xml(write,elem,encoding,qnames,namespaces)937 write(_escape_cdata(text,encoding))938 for e in elem: - > 939 _serialize_xml(write ,e,编码,qnames,无)940写("")941其他:
C:\ Anaconda\lib\xml\etree\ElementTree.pyc in _serialize_xml(write,elem,encoding,qnames,namespaces)937 write(_escape_cdata(text,encoding))938 for e in elem: - > …
我想在一个xml文件中添加一个子元素,但是在一个非常具体的位置,而不是附加到最后。
标准方法是:
subi = ET.SubElement(root[0][0], 'subi')
Run Code Online (Sandbox Code Playgroud)
这很好。
但是:比方说,root[0][0] 已经有两个孩子,因此可以通过 root[0][0][0] 和 root[0][0][1] 访问。
并且我希望“subi”成为新的中间孩子root[0][0][1],使原来的第二个孩子成为第三个孩子root[0][0][2]。
有没有办法做到这一点?(我对生活和自然的经历会说不,但我对python寄予厚望=)
所以这与之前发布的较短问题有关:在字典中按值获取密钥
我修改了值为lists 的示例int.说我有这个,
mydict = {'george':[1,2,3],'amber':[18,19]}
Run Code Online (Sandbox Code Playgroud)
然后我可以输出"amber":
print(list(mydict.keys())[list(mydict.values()).index([18,19])])
Run Code Online (Sandbox Code Playgroud)
有没有办法调整这个,所以我可以"amber"通过"询问"列表中的一个项目输出?ieeg 19?
简介:我想问我的字典:"给我一个有价值的密钥(列表)项目"19"
python ×4
elementtree ×3
attributes ×1
dictionary ×1
list ×1
lxml ×1
marytts ×1
pandas ×1
xml ×1