2013-04-17 4 views
1

Я пытаюсь прочитать в графическом файле моей сети facebook в NetworkX. Однако, поскольку у некоторых моих друзей необычные персонажи, такие как акценты, их имена не могут быть прочитаны в networkx.Как читать в графическом файле в networkx со странными символами?

я выполнил команду:

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

Я тогда получаю ошибку:

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

Я посмотрел на файл GraphML в Sublime Text, и, кажется, есть проблема с именами, такими как Andrés

Затем я посмотрел графический файл в Gephi, чтобы посмотреть, как он выглядит. Имя, Андрес, в Gephi выглядит следующим образом:

Andrés

Когда я экспортировать данные без внесения каких-либо изменений в отдельный файл GraphML, и попытаться прочитать этот файл, я получаю ошибку:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 7-8: ordinal not in range(128)

Когда я удаляю имена проблем в Gephi, файл отлично читается.

Я не уверен, есть ли способ редактировать исходный файл-граф, чтобы исправить имена с необычными символами.

Я смотрел на эту страницу: 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

Смежные вопросы