Python 用etree追加多个元素,如何在新行中写入每个元素?
我正在使用Python和etree向graphml文件中的一些节点添加一些元素。我有两个字符串列表,其中包含一些要写入.graphml文件的数据。我已经设法做到了这一点,但当使用.append()函数时,它会将两个新元素写在同一行上。在同一个循环中写入这些新元素时,有没有一种好方法可以在它们之间获得行距 我有以下数据集:Python 用etree追加多个元素,如何在新行中写入每个元素?,python,xml,elementtree,graphml,Python,Xml,Elementtree,Graphml,我正在使用Python和etree向graphml文件中的一些节点添加一些元素。我有两个字符串列表,其中包含一些要写入.graphml文件的数据。我已经设法做到了这一点,但当使用.append()函数时,它会将两个新元素写在同一行上。在同一个循环中写入这些新元素时,有没有一种好方法可以在它们之间获得行距 我有以下数据集: <?xml version="1.0" encoding="UTF-8"?> <graphml xmlns="http://graphml.graphdraw
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns">
<node id="node1">
<data key="label">node1</data>
<data key="degree">6</data>
</node>
<node id="node2">
<data key="label">node2</data>
<data key="degree">32</data>
</node>
<node id="node3">
<data key="label">node3</data>
<data key="degree">25</data>
</node>
</graphml>
使用以下代码将列表作为元素附加到数据集中:
for node in root:
#checks if correct node
for index, i in enumerate(nameOfNode):
if i == node[0].text:
#create and add lastRelated element
lastRelated = Element('data')
lastRelated.set('key', 'lastRelated')
node.append(lastRelated)
lastRelated.text = lastRelated[index]
#create and add lastActive element
lastActive = Element('data')
lastActive.set('key', 'lastActive')
node.append(lastActive)
lastActive.text = lastActive[index]
updatedText = etree.tostring(node)
#write to file
file = open('dataset.graphml', 'wb')
file.write(updatedText)
file.close()
结果如下:
<node id="node1">
<data key="label">node1</data>
<data key="degree">6</data>
<data key="lastActive">2015</data><data key="lastRelated">2011</data></node>
节点1
6.
20152011
我希望它的结构如下:
<node id="node1">
<data key="label">node1</data>
<data key="degree">6</data>
<data key="lastActive">2015</data>
<data key="lastRelated">2011</data>
</node>
节点1
6.
2015
2011
有人找到了解决方案吗?您应该能够通过为新元素上的属性提供合适的值来获得所需的输出。
tail
是位于元素的结束标记之后、以下元素的开始标记之前的文本
...
thetail = "\n "
lastRelated.tail = thetail
lastActive.tail = thetail
updatedText = etree.tostring(node)
...
我假设
\n
不起作用?我尝试过使用\n with:lastActive.set('\n key',lastActive'),当然这会导致新行从“它将进入updatetext=etree.tostring(node)
,因为file.write(updatetext)
是\n
应该在的地方。因此,您必须附加每个元素,然后添加一行新行。或者,或者,或者,或者lxml可能有我正在寻找的解决方案,但我在安装lxml包时遇到问题。通过Pycharm安装时,出现以下错误:错误:b““xslt config”未被识别为内部或外部命令,\r\n不可操作的程序或批处理文件。\r\n“我已尝试从安装所有不同版本的lxml,并检查pip是否最新,但出现错误:“…whl在此平台上不受支持。有没有这方面的经验?看起来像是Windows的问题。转到并下载您的python版本的32位二进制文件(cp后的数字)。使用pip
进行安装(如果您根本没有使用pip
,请获取:()pip安装lxml-3.6.4-cpXX-cpXXm-win32.whl
在同一目录下使用cmd或powershell或ming等进行安装。非常有用!谢谢!
...
thetail = "\n "
lastRelated.tail = thetail
lastActive.tail = thetail
updatedText = etree.tostring(node)
...