【发布时间】:2017-02-26 09:23:18
【问题描述】:
我正在使用 Python 和 etree 向 graphml 文件中的某些节点添加一些元素。我有两个字符串列表,其中包含一些我想写入 .graphml 文件的数据。我设法做到了这一点,但是当使用 .append() 函数时,它将两个新元素写入同一行。有没有一种好方法可以在将这些新元素写在同一个循环中时将它们分隔开?
我有以下数据集:
<?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>
还有两个包含年份的列表:
lastActive["2013","2014","2015"]
lastRelated["2012","2014","2011"]
使用以下代码将列表作为元素附加到数据集中:
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>
我希望它的结构如下:
<node id="node1">
<data key="label">node1</data>
<data key="degree">6</data>
<data key="lastActive">2015</data>
<data key="lastRelated">2011</data>
</node>
有人有解决办法吗?
【问题讨论】:
-
我假设
\n不起作用? -
我尝试使用 \n 与:lastActive.set('\n key', 'lastActive') 虽然这当然会导致新行从 " NEW LINE key=..."
-
它将进入
updatedText = etree.tostring(node),因为file.write(updatedText)是\n应该在的位置。所以你将不得不附加每个元素,然后是一个新行。或见stackoverflow.com/questions/3095434/…,或stackoverflow.com/questions/34608740/…,或stackoverflow.com/questions/17402323/… -
看来 lxml 可能有我正在寻找的解决方案,但我在安装 lxml 包时遇到问题。通过 Pycharm 安装时出现以下错误:ERROR: b"'xslt-config' is not Recognized as an internal or external command,\r\noperable program or batch file.\r\n" 我已尝试安装所有不同的版本来自link 的 lxml,并检查 pip 是否是最新的,但我收到错误消息:“...whl 不是此平台上支持的轮子。有任何相关经验吗?
-
看起来是 Windows 问题。转到lfd.uci.edu/~gohlke/pythonlibs/#lxml 并下载适用于您的python 版本的32 位二进制文件(cp 后面的数字)。使用
pip安装(如果你根本不使用pip,获取它:(pip.pypa.io/en/stable/installing)pip install lxml-3.6.4-cpXX-cpXXm-win32.whl在同一目录下使用cmd或powershell或ming等。
标签: python xml elementtree graphml