networkx の 1.6.1 で遊んでいたコードをいくつか引っ張り出しました。gml
1.8.1 では、またはへの書き込みでは機能しませんgraphml
。
問題は、次のように data dict 内にエッジ属性を書き込めないことに要約されます。
BasicGraph = nx.read_graphml("KeggCompleteEng.graphml")
for e,v in BasicGraph.edges_iter():
BasicGraph[e][v]['test'] = 'test'
nx.write_graphml(BasicGraph, "edgeTester.graphml")
エラーの原因:
AttributeError: 'str' object has no attribute 'items'
私が使用する場合:for e,v,data in BasicGraph.edges_iter(data=True):
データは次のように出力されます:
{'root_index': -3233, 'label': u'unspecified'}
test
別名、新しい属性は辞書の外にあります。
ドキュメントには、上記のようにできるはずだと書かれています。しかし、私はばかげた間違いを犯したと思います。正しい道に戻していただければ幸いです。
編集:
そこで、プログラム内で生成されたグラフを使用してプログラムを実行しました 。問題なく実行されBasicGraph = nx.complete_graph(100)
ました。
次に、入門書のサンプルのgraphmlファイルを使用して実行しましたが、BasicGraph = nx.read_graphml("graphmltest.graphml")
それも機能しました。(問題ではないことを確認するために、Cytoscape にインポートしたり、Cytoscape からインポートしたりしました)
明らかに、それは私が使用しているファイルです。ここにリンクがありますが、何が問題なのか誰にもわかりますか?