2013-04-17 27 views
1

我正在尝试将我的Facebook网络的graphml文件读入到NetworkX中。但是,由于我的一些朋友有不寻常的字符,例如重音,他们的名字无法被读入networkx。如何使用奇怪的字符将graphml文件读入networkx中?

我跑的命令:

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

然后我得到的错误:

TypeError: int() argument must be a string or a number, not 'NoneType'

我看着在崇高的文本的graphml文件,它似乎与名称,如麻烦Andrés

然后我看着Gephi中的graphml文件,看看它的样子。这个名字,安德烈斯,在Gephi样子:

Andrés

当我导出数据,而不进行任何编辑到一个单独的graphml文件,并尝试读取这个文件,我得到的错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 7-8: ordinal not in range(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' codec can't encode characters in position 8-19: ordinal not in range(128)

如何解决这个问题?

回答

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) 
3

这在Python 2.7为我工作。您必须将节点类型指定为unicode。

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

尼斯和干净的答案! – Cragfelt