我有一个.txt文件,该文件有46行,每行代表网络中的一个节点,然后后面有许多属性。

Example Name; 03.01.194, Luzern, (LU), Test, Attribute, Other Attribute,
Kasdasd Alex; 22.12.1957, in Blabla, (ZH), Bürgerorte, Oeschgen (AG),  Zivilstand,


我不确定如何让networkx将其视为节点列表,我曾考虑过一些事情可能可行,但目前不行

import pandas as pd
import networkx as nx
nodes = pd.read_csv('final.csv', header=None)
nodes


上面代码的问题是属性用逗号分隔,而不是节点分隔。

另一种尝试,我想打开文件,并逐行添加节点,但被卡在G.add_node()命令上

G = nx.Graph()
with open('final.txt') as infile:
    for line in infile:
        G.add_node()


是这两种方法之一,还是我应该尝试一些不同的方法?

另外,为进行进一步分析,networkx是否可以比较节点的属性,如果匹配,则创建加权边?

最佳答案

您可以通过读取将分隔符指定为';'的文件来实现此目的。因此第一个元素是节点键,其余元素是属性。然后,用定界符',分割属性字符串,并将返回的列表添加为节点属性。我复制了您在“ test.txt”文件中提供的示例,并执行了以下代码。

G = nx.DiGraph()

csv_F = csv.reader(open("test.txt"),delimiter=';')
for row in csv_F:
    attributes=row[1].split(',')
    G.add_node(row[0], attr = attributes)


然后,我按如下所示打印节点及其属性:

for n in G.nodes():
    print 'Node: '  + str(n)
    print 'Atrributes' + str(G.node[n]['attr'])


结果:


  节点:Kasdasd Alex
  
  特例:['22.12.1957','in Blabla','(ZH)','B \ xc3 \ xbcrgerorte','Oeschgen(AG)','Zivilstand','']
  
  节点:示例名称
  
  属性:['03.01.194','Luzern','(LU)','Test','Attribute','Other Attribute','']


最后,关于您的问题,networkx提供了此类功能以及更多功能。看一下教程here

关于python - 使用多个分隔符networkx/pandas从.txt文件中添加具有属性的节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33485104/

10-12 00:37
查看更多