С Networkx, как написать graphml и другой формат в строку, а не файл?
Я использую networkx очень поверхностно. Легко написать график в файл, например graphml, но как я могу сохранить его в строку, не беспокоя файловую систему?
Его документ говорит, что это возможно.
2 ответа
Решение
У большинства форматов также есть "генератор". Таким образом, вы можете сделать это без использования StringIO:
In [1]: import networkx as nx
In [2]: G=nx.path_graph(4)
In [3]: s='\n'.join(nx.generate_graphml(G))
In [4]: print s
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<key attr.name="name" attr.type="string" for="graph" id="d0" />
<graph edgedefault="undirected">
<data key="d0">path_graph(4)</data>
<node id="0" />
<node id="1" />
<node id="2" />
<node id="3" />
<edge source="0" target="1" />
<edge source="1" target="2" />
<edge source="2" target="3" />
</graph>
</graphml>
Как прокомментировал Ларсман, можно использовать StringIO
:
import networkx as nx
import StringIO
import itertools
g = nx.Graph()
edges = itertools.combinations([1,2,3,4], 2)
g.add_edges_from(edges)
# File-like object
output = StringIO.StringIO()
nx.write_graphml(g, output)
# And here's your string
gstr = output.getvalue()
print gstr
output.close()