2015-08-21 2 views
2

У меня есть вопрос до Method to save networkx graph to json graph?, но Stack Overflow не позволит мне добавить комментарий к ответу Sirus, который я хотел бы уточнить, так что вот мой вопрос.Способ экспорта графика networkx в файл json graph?

What is the best way to write the JSON data to a text file?

Я пытаюсь сделать очевидный шаг записи файла моего json_graph генерируемой NetworkX, так что я могу читать его в D3.js. Я могу распечатать его на консоли без проблем, поэтому я могу проверить, что он работает для создания соответствующих данных JSON. Но мои попытки сохранить его в файле потерпели неудачу и (как обычно с Python), документация в принципе бесполезна. Вот что я пробовал:

with open('networkdata1.json', 'w') as outfile1: 
    outfile1.write(json_graph.node_link_data(G)) 

и это дает мне ошибку: «TypeError: ожидается, объект буфера символов» Если я запускаю тот же код с простой строкой символов вместо JSon графа, то он работает отлично. Проблема заключается в переводе объекта json в текст, и я не знаю, как это сделать, и я не могу найти примеров, которые включают этот шаг. Я уверен, что это просто, как только вы это знаете, но если вы не знаете Python, очень сложно понять эти вещи из материалов, доступных в Интернете.

Каков наилучший способ записи данных JSON в текстовый файл? Если это правильный метод, что может быть причиной этой проблемы?

ответ

3

Джейми был на правильном пути, и частичный ответ был также на странице NetworkX, совмещая их создает рабочий раствор:

with open('networkdata1.json', 'w') as outfile1: 
    outfile1.write(json.dumps(json_graph.node_link_data(G))) 

Оказывается, что необходимо преобразовать график в json_graph , а затем выгрузите json в текст, а затем напишите этот текст в текстовый файл. Очевидно, что они должны были включить этот шаг более очевидно в документацию, но, надеюсь, следующий человек, который начнет этот путь, может найти это легко и быстро.

Удостоверьтесь, что у вас есть import json и import networkx as nx, чтобы это работало (хотя последнее, похоже, не отображается в этом фрагменте кода).

0

Вам, вероятно, нужно сначала выгрузить json в текст. В большинстве библиотек json это делается с помощью метода .dumps(object).

with open('networkdata1.json', 'w') as outfile1: 
    outfile1.write(json_graph.dumps(G)) 

Противоположная, чтобы читать в json обычно .loads(text_data).

+0

Спасибо за ответ, но объект json_graph "'module не имеет атрибутов' dumps '." NetworkX создает специальный объект json-графа с явной целью делать именно то, что я хочу сделать, но не документировал, как это сделать. Я верю, что решение будет специфичным для объекта NetworkX json. –

+0

@AaronBramson совершенно правый. рад, что вы его отсортировали –

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