简体   繁体   中英

Save networkx DiGraph preserving nodes attributes

I'm trying to save networkx DiGraph by preserving nodes' attributes.

I have tried with nx.write_weighted_edgelist , nx.write_edgelist and nx.write_weighted_edgelist , and after trying (and also looking at https://networkx.org/documentation/networkx-1.10/reference/readwrite.html ) I know that both adjacency and edge lists does not preserve nodes' attributes.

Now I have seen also the other options in the networkx link, but I don't understand if other commands preserve attributes, and I need to be sure that it works (my code need to create and save more than 5000 graphs and it takes almost a day to run).

So which is the best way to save a graph and preserve nodes' attributes?

First, note that you are using an outdated version of the NetworkX docs; you should always use the stable version .

One format which is guaranteed to preserve node data is the pickle (although this is deprecated in NetworkX 2.6, it is currently usable):

In [1]: import networkx as nx

In [2]: G = nx.Graph()

In [3]: G.add_node("A", weight=10)

In [4]: nx.write_gpickle(G, "test.gpickle")

In [5]: H = nx.read_gpickle("test.gpickle")

In [6]: H.nodes(data=True)
Out[6]: NodeDataView({'A': {'weight': 10}})

The GML format should also work for most datatypes:

In [8]: nx.write_gml(G, "test.gml")

In [9]: H = nx.read_gml("test.gml")

In [10]: H.nodes(data=True)
Out[10]: NodeDataView({'A': {'weight': 10}})

GEXF works as well:

In [12]: nx.write_gexf(G, "test.gexf")

In [13]: H = nx.read_gexf("test.gexf")

In [14]: H.nodes(data=True)
Out[14]: NodeDataView({'A': {'weight': 10, 'label': 'A'}})

So you have several options and can decide based on performance and support for the specific attribute data you are trying to save.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM