如何保存networkx DiGraph(有向图)并完整保留节点属性
保存带节点属性的NetworkX DiGraph最优方案
最优首选:GPickle格式
适配你批量存储5000张图的长时间运行需求,是稳定性和兼容性最高的选择:
- 是NetworkX原生支持的Python对象序列化格式,可100%完整保留所有节点属性、边属性、图全局属性,支持各类自定义属性类型,无丢失风险
- 读写速度快,存储/加载效率远高于文本类格式
- 代码示例:
保存图:nx.write_gpickle(G, "./目标存储路径/图文件名.gpickle")
读取图:G = nx.read_gpickle("./目标存储路径/图文件名.gpickle")
备选方案:GraphML格式
如果有跨语言读取、兼容第三方图可视化工具的需求,可选择该通用标准化格式:
- 支持存储字符串、数值等基础类型的节点、边属性,兼容性广
- 注意:如果节点属性为Python特有对象(如自定义类实例、numpy数组等),该格式无法完整存储,仍优先选择GPickle
- 代码示例:
保存图:nx.write_graphml(G, "./目标存储路径/图文件名.graphml")
读取图:G = nx.read_graphml("./目标存储路径/图文件名.graphml")
补充说明
你此前测试的nx.write_edgelist、nx.write_weighted_edgelist类方法,底层仅基于边关联关系存储数据,仅能保留边属性,无法存储孤立节点信息和独立的节点属性,因此不符合需求。
内容的提问来源于stack exchange,提问作者Duccio Borchi
相关产品推荐
相关产品推荐

