2016-10-17 3 views
0

私は、Pythonとetreeを使ってgraphmlファイルのいくつかのノードにいくつかの要素を追加しています。私は.graphmlファイルに書きたいいくつかのデータを含む2つの文字列リストを持っています。私はこれを行うことができましたが、.append()関数を使用すると、同じ行に2つの新しい要素が書き込まれます。これらの新しい要素を同じループに書き込んでいる間に、これらの新しい要素を行間で区切る良い方法はありますか?etreeで複数の要素を追加すると、新しい行に各要素を書き込む方法は?

私は、次のデータセットを持っている:

<?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> 

+0

私は '\ n'は動作しないと思いますか? – Eugene

+0

私は\ n:lastActive.set( '\ n key'、 'lastActive')で\ nを使用しようとしましたが、これは当然「 Arefo

+0

It 'updatedText = etree.tostring(node)'に入ります。なぜなら、 'file.write(updatedText)'は '\ n'があるべき場所であるからです。したがって、各要素を追加してから、新しい行を追加する必要があります。または、http://stackoverflow.com/questions/3095434/inserting-newlines-in-xml-file-generated-via-xml-etree-elementtree-in-python、またはhttp://stackoverflow.com/questions/34608740を参照してください。/how-to-get-xml-output-in-a-file-with-new-line-python-xml-etree、またはhttp://stackoverflow.com/questions/17402323/use-xml-etree- elementtree-to-write-out-nicely-formatted-xml-files – Eugene

答えて

0

新しい要素のtailプロパティに適切な値を指定すると、必要な出力を得ることができます。 tailは、要素の終了タグの後、次の要素の開始タグの前に来るテキストです。

... 

thetail = "\n " 
lastRelated.tail = thetail 
lastActive.tail = thetail 

updatedText = etree.tostring(node) 

... 
+0

魅力!ありがとう! – Arefo

関連する問題