栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

无需会员将有道云笔记脑图转换xmind

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无需会员将有道云笔记脑图转换xmind

我的烦恼

有道云笔记有脑图功能 我平时经常用到 之所以很少用到其他脑图工具 是因为我一直用有道云笔记写笔记。因此编辑脑图和查看脑图比较方便 但是需要将脑图导出的时候目前只支持图片和xmind 但是需要开会员 由于囊中羞涩 所以我想了别的方案。

解决方案

我找到xmind的官方GitHub https://github.com/xmindltd 找到了python的SDK 看了下有python和java以及js这三个sdk 但是Java和python的sdk已经不维护了 不过还是可以用的 就是新功能可能用不了。

找到了生成xmind的方法 但是如何将有道云笔记脑图的源文件拿到呢 还得分析一下源文件格式 写写算法去进行转换。之前导出过有道云笔记 知道好多文件都是明文保存 没有加密啥的 因此我用everything搜索了我的文件名 还真找到了办法。如下图所示 就是我找到的文件名 然后通过文件搜索工具搜到了源文件位置。

下面是我的思维导图的源文件 用文本方式打开 发现就是一个简单的json格式。

下面就是json内容 实际就是每个节点都有父节点id 根节点没有父节点 每个节点组成一个数组 这种格式处理最好用的就是递归的方法。

{
 nodes : [
 id : root ,
 isroot : true,
 topic : 测试脑图 ,
 customStyle : {
 fontFamily : [
 Microsoft YaHei ,
 STXihei 
 link : null,
 expanded : true,
 parentid : null,
 style : {}
 id : a231f89912e42e5b ,
 topic : 分支主题1 ,
 customStyle : {
 fontFamily : [
 Microsoft YaHei ,
 STXihei 
 borderColor : #4D94FF 
 expanded : true,
 parentid : root ,
 style : {}
 readonly : false,
 toolbar : {
 lineType : default ,
 strategy : logic_right ,
 zoom : 1,
 loading : true,
 borderColor : #4D94FF 
 remarks : {},
 version : 2.0 ,
 resourceList : 
}
动手操作

我的所有代码都放到GitHub https://github.com/jan-bar/mindmap_to_xmind 如果有兴趣 可以去看看 核心代码如下 没有太复杂的东东。

import json
import xmind
import sys
import os
def convert_mindmap_xmind(input_file, save_file):
 data_dict {} # 将节点保存到字典中
 with open(input_file, r , encoding utf-8 ) as f:
 json_data json.load(f)
 for node in json_data[ nodes ]:
 data_dict[node[ id ]] {
 id : node[ id ],
 parentid : node[ parentid ],
 topic : node[ topic ],
 sub_topic : {},
 data_root None
 for val in data_dict.values():
 if val[ id ] root :
 data_root val # 保存根节点
 elif n : data_dict.get(val[ parentid ]):
 # 当前节点挂到父节点下
 n[ sub_topic ][val[ id ]] val
 if data_root is None:
 print( 数据有误,没有找到根节点 )
 return
 # print(json.dumps(data_root)) # 可以打印看看结果
 if os.path.exists(save_file):
 os.remove(save_file) # 目标文件存在则删除
 mind xmind.load(save_file)
 sheet1 mind.getPrimarySheet()
 # 获取sheet并设置名称为输入文件名
 sheet1.setTitle(os.path.basename(input_file))
 root1 sheet1.getRootTopic()
 # 设置属性为: 逻辑图(向右), 和有道云笔记保持一致
 root1.setAttribute( structure-class , org.xmind.ui.logic.right )
 def set_topic(root, val_data):
 root.setTitle(val_data[ topic ])
 for sub_val in val_data[ sub_topic ].values():
 set_topic(root.addSubTopic(), sub_val)
 set_topic(root1, data_root) # 递归设置子节点
 xmind.save(mind, save_file)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/268242.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号