这是一个简单的Python程序,用于生成网络图。当我将数据放入程序中时一切正常,但当我决定将数据放入两个输入文件中时,事情就变得有趣了起来。有两个输入文件:节点(或顶点)和边。当我从名为“Step3-Vertices.txt”的输入文件中读取节点信息时,它没有出现任何错误,但是添加了一些我没有提供的附加信息到节点中。以下是附加信息的列表:
错误消息 - 当从文件添加边信息时,NETWORKX失败:
'[', '{', "'", '0', '2', ',', ' ', '6', '8', 'W', '}', '.', '1', '5', '3', '7', '4', 'O', 'X', 'D', ']', '\n'
然后我读取了第二个名为“Step3-Edges.txt”的文件,这次我得到了一系列我无法理解的错误消息。错误消息 - 当从文件添加边信息时,NETWORKX失败:
Traceback (most recent call last):
File "step4_test1.py", line 30, in <module>
G.add_edges_from(data_edges)
File "/home/desmond/anaconda3/lib/python3.6/site-packages/networkx/classes/graph.py", line 934, in add_edges_from
"Edge tuple %s must be a 2-tuple or 3-tuple." % (e,))
networkx.exception.NetworkXError: Edge tuple [ must be a 2-tuple or 3-tuple.
请问有人可以帮我吗?
这是我的程序:
""" THIS PROGRAM WORKS PROPERLY WHEN DATA ARE PASSED TO LOCAL VARIABLES CALLED "nodes" and "edges". THE EXACT DATA ARE ALSO STORED IN TWO FILES: "nodes" in 'Step3-Vertices.txt' and "edges" in 'Step3-Edges.txt'. PROBLEMS STARTED WHEN NODES AND EDGES ARE READ FROM BOTH FILES. FIRST, RUN THIS PROGRAM AND IT SHOULD GENERATE A GRAPH. THEN REPLACE THE "nodes" with "data_nodes" in "G.add_nodes_from" AND THIS WILL GENERATE UNEXPECTED ADDITIONAL NODES WHICH ARE NOT SUPPOSED TO BE THERE. NEXT, REPLACE THE "edges" with "data_edges" in "G.add_nodes_from" AND ERROR MESSAGES ARE DISPLAYED."""
import networkx as nx
import matplotlib.pyplot as plt
""" READ NODES INFORMATION FROM FILE """
with open('Step3-Vertices.txt', encoding='utf-8') as data_file:
data_nodes = data_file.read()
print(data_nodes)
""" READ EDGESS INFORMATION FROM FILE """
with open('Step3-Edges.txt', encoding='utf-8') as data_file:
data_edges = data_file.read()
print(data_edges)
G=nx.Graph()
""" PASS NODES INFORMATION TO A VARIABLE CALLED 'nodes' """
nodes = ['0000000002', '0000000101', '0000000111', '0000000200', '0000000502', '0000000600', '0000001000', '0000001001', '0000001069', '0000001253', '0000001462', '0000003013', '0000003200', '0000004100', '0000004305', '0000005100', '0000005460', '0000006600', '0000010021', '0000010101', '0000010200', '0000010314', '0000012000', '0000012151', '0000012600', '0000015201', '0000016100', '0000017002', '0000020002', '0000020050', '0000020100', '0000021001', '0000022044', '0000022100']
""" PASS EDGES INFORMATION TO A VARIABLE CALLED 'edges' """
edges = [{'0000000002', '6080022W'}, {'80.015.012.210', '0000000002'}, {'80.015.012.210', '0000000502'}, {'0000012000', '0000000502'},{'0000000101', '012.105.123.127'}, {'0000000111', '2442032O'}, {'105.103.02.110', '0000000111'}, {'0604054X', '0000000200'}, {'100.001.008.002', '0000000200'}, {'0000000502', '1002567D'}, {'208.08.032.1', '0000000502'}]
"""THIS IS WHERE YOU ADD DATA TO THE NODES AND EDGES, BY DEFAULT, LOCAL VARIABLES ARE USED. TO ADD DATA FROM THE INPUT FILES - replace 'nodes' with 'data_nodes' and replace 'edges' with 'data_edges' """
G.add_nodes_from(nodes)
G.add_edges_from(edges)
print("Nodes of graph: ")
print(G.nodes())
print("Edges of graph: ")
print(G.edges())
### DRAW A GRAPH ###
nx.draw(G)
plt.savefig("test1.png") # save as png
plt.show() # display
<file>.read()
时,Python会给您一个单一的字符串。上面的代码将由逗号分隔的元素列表转换为元组列表。对于节点列表,您可能需要做同样的事情。否则,该字符串将被解释为字符列表,并在G.add_nodes_from()
中引发错误。 - Bonlenfum