小编sib*_*ert的帖子

如何在ElementTree(Python)中向SubElement添加属性

我使用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)

python attributes lxml elementtree

6
推荐指数
2
解决办法
2万
查看次数

如何解决TypeError:无法序列化浮点Python Elementtree

我收到了调试问题.

由于我在这里很新,请原谅可能的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)

我不知道你们需要在这里帮助我,所有的源代码都很冗长.错误消息也是如此.但这有点容易,所以我在这里发布......

提前说明:

  • 据我所见,Ctrl + FI在我的数据中没有0.029999999 ....
  • 在我的数据中,所有数字都舍入到2位小数
  • 四舍五入改变什么btw?还是只是为了展示?
  • 我真的非常困惑,特别是因为似乎没有可谷歌类似的情况,只是几乎 - 但不是完全足够的.

-------------------------------------------------- ------------------------- 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: - > …

python serialization elementtree pandas marytts

6
推荐指数
1
解决办法
2万
查看次数

Python ElementTree:如何在非常特定的位置添加子元素?

我想在一个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寄予厚望=)

python xml elementtree

4
推荐指数
1
解决办法
6414
查看次数

如果值为list,则按值获取字典键

所以这与之前发布的较短问题有关:在字典中按值获取密钥

我修改了值为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 dictionary list

0
推荐指数
1
解决办法
74
查看次数