如何用奇怪的字符将graphml文件读入networkx?

时间:2013-04-17 19:31:11

标签: networkx graphml

我正在尝试将我的facebook网络的graphml文件读入NetworkX。但是,因为我的一些朋友有不寻常的字符,例如重音符号,所以他们的名字无法被读入networkx。

我跑了命令:

g = nx.read_graphml("/Users/juliehui/Desktop/MyGraph.graphml")

然后我得到错误:

  

TypeError:int()参数必须是字符串或数字,而不是'NoneType'

我查看了Sublime Text中的graphml文件,它似乎在使用名称时出现问题,例如Andrés

然后我查看了Gephi中的graphml文件,看看它是什么样的。 Gephi中的名字Andrés看起来像:

  

Andr,Äö√†√∂¬¨¬©小号

当我导出数据而不对任何单独的graphml文件进行任何编辑,并尝试读取该文件时,我收到错误:

  

UnicodeEncodeError:'ascii'编解码器无法对位置7-8中的字符进行编码:序数不在范围内(128)

当我删除Gephi中的问题名称时,该文件读取正常。

我不确定是否有某种方法可以编辑我的原始graphml文件以修复具有异常字符的名称。

我看过这个页面:Graphml parse error 但是,我无法弄清楚我的graphml文件是UTF-8还是需要UTF-8或者需要是ASCII?

我也尝试过:

data="/Users/juliehui/Desktop/MyGraph.graphml"
udata=data.decode("utf-8")
asciidata=udata.encode("ascii","ignore")
g = nx.read_graphml(asciidata)

但是,这给出了错误:

  

UnicodeEncodeError:'ascii'编解码器无法编码位置8-19中的字符:序数不在范围内(128)

如何解决此错误?

2 个答案:

答案 0 :(得分:3)

这在Python 2.7中对我有用。您必须将节点类型指定为unicode。

nx.read_graphml('/path/to/my/file.graphml', unicode)

答案 1 :(得分:1)

我建议使用unidecode删除文件中的所有非ASCII字符:

from unidecode import unidecode
data_in="/Users/juliehui/Desktop/MyGraph.graphml"
data_ascii ="/Users/juliehui/Desktop/MyGraph_ASCII.graphml"
f_in = open(data_in, 'rb')
f_out = open(data_ascii, 'wb')
for line in f_in:
    f_out.write(unidecode(line))
f_in.close()
f_out.close()

然后你可以使用:

g = nx.read_graphml(data_ascii)