Custom edgelist output in networkx
I am trying to implement tarjan algorithm for practice. I decided to create a random graph that will give the algorithm as input by adding one edge at a time.
I created a random graph and saved it in a file as shown below
from networkx import *
import sys
import matplotlib.pyplot as plt
n = 10 # 10 nodes
m = 20 # 20 edges
G = gnm_random_graph(n, m)
# print the adjacency list to a file
try:
nx.write_edgelist(G, "test.edgelist", delimiter=',')
except TypeError:
print "Error in writing output to random_graph.txt"
fh = open("test.edgelist", 'rb')
G = nx.read_adjlist(fh)
fh.close()
The result I got in the test.edgelist file looks something like this.
0,4,{} 0,5,{} 0,6,{} 1,8,{} 1,3,{} 1,4,{} 1,7,{} 2,8,{} 2,3,{} 2,5,{} 3,8,{} 3,7,{} 4,8,{} 4,9,{} 5,8,{} 5,9,{} 5,7,{} 6,8,{} 6,7,{} 7,9,{}
Be that as it may, in the tarjan algorithm that I have implemented, the input is in the format
add_edge(1,2) add_edge(2,3) ....
I want to use a randomly generated graph in a loop for input as input.
How can I not get {}? Also, if there is any better way to implement this, please help as it will be difficult for a massive dataset to store it in one list (add_edge () adds an edge to the list)
source to share
You need to discard all edge data with a parameter data
to False
:
nx.write_edgelist(G, "test.edgelist", delimiter=',', data = False)
Output:
0,3 0,4 0,1 0,8 0,6 0,7
However, if you want to keep the edges in your own format, use a loop like this:
from networkx import gnm_random_graph
n = 10 # 10 nodes
m = 20 # 20 edges
G = gnm_random_graph(n, m)
# iterate over all edges
with open('./test.edgelist', 'w') as f:
for edge in G.edges():
f.write("add_edge{0}\n".format(edge))
Output:
add_edge(0, 7) add_edge(0, 4) add_edge(0, 8) add_edge(0, 3) add_edge(0, 2) add_edge(1, 5) add_edge(1, 6) add_edge(1, 7) add_edge(2, 5) add_edge(2, 4) add_edge(2, 9) add_edge(2, 8) add_edge(2, 3) add_edge(3, 9) add_edge(3, 5) add_edge(4, 9) add_edge(4, 7) add_edge(5, 9) add_edge(6, 9) add_edge(7, 9)
source to share