☰
从百度脑图到思源笔记:Linux数据迁移与格式转换实战
2026/9/29 15:32:43 网站建设 项目流程

1. 迁移前先弄清楚的三件事:数据形态、目标格式、中转路径

在Deepin或UOS上折腾百度脑图迁移到思源笔记这事,说白了不是"搬文件"这么简单。你在百度脑图里画了那么多思维导图,真正要迁移的其实是两样东西:一是脑图本身的层级关系,二是每个节点里承载的文字内容。至于那些花里胡哨的图标、主题颜色、连线样式,说实话迁过去之后大概率用不上,也没必要纠结。

我在Deepin 23上实测过好几次,整个过程踩了不少坑,最后沉淀下来两条路线:一条是利用百度脑图自带的导出功能,走"导出 → 导入"的直通线路;另一条是直接解析百度脑图的数据文件,用脚本把内容改写成思源笔记能识别的格式。两条路各有适用场景,后面我会把细节全部展开。

先花点时间把底层的逻辑讲透,否则你盲目跟着操作,遇到意外情况会不知道怎么处理。

1.1 百度脑图的数据到底长什么样

百度脑图的底层存储格式是KityMinder的JSON结构。你在网页里打开任意一张脑图,浏览器会和服务器交互,最终拿到的是一份以root为根节点的嵌套JSON。这个JSON里每个节点有一个data字段(里面是text文本内容、image图片信息等),下面挂着一个children数组,子节点继续递归嵌套。

有些朋友可能不知道怎么看这份JSON——最简单的办法:在百度脑图编辑页按F12打开开发者工具,切到Network面板,刷新页面后找返回json数据的请求,响应体里就是完整的脑图数据。当然,更省事的方式是直接通过百度脑图的"另存为"功能,把文件以.cm格式下载到本地,这个文件本质上就是同一份JSON,用文本编辑器就能打开。

之所以要把数据形态搞清楚,是因为它直接决定了方法二的可行性。你在百度脑图里插入的图片、设置的优先级图标、标注的备注信息,全部都会出现在JSON的对应字段里。转换脚本如果能识别这些字段,迁移后的信息完整性就会高很多;如果只盯着text,那图片和备注只能放弃。

1.2 思源笔记的导入接口有哪些

思源笔记的导入路径比百度脑图丰富得多。它原生支持Markdown文件的直接导入,也支持OPML、HTML等格式的转换导入。更关键的一点是,思源笔记内部对文档的存储本身就是以.md文件为基础,每个文档对应一个独立的Markdown文件,存放在工作空间的数据目录里。

所以,迁移思路可以变得非常清晰:只要能把百度脑图的层级结构转换成Markdown的有序列表或无序列表,思源笔记就能无缝吃掉。你既可以在思源里新建文档后直接把Markdown粘贴进去,也可以把.md文件拷贝到思源的工作空间目录下,再通过界面刷新识别出文档。

这里要提醒一下,思源笔记的"粘贴为Markdown"和使用Markdown导入插件,处理逻辑略有差异。粘贴方式更偏向编辑器内的即时转换,对大文件、多图片的内容处理效率不高;而导入文件方式则会走一遍转换流程,稳定性更好。我个人的习惯是:小图用粘贴,大批量迁移用文件导入。

1.3 两条迁移路线的选择逻辑

这两条路线不是替代关系,而是互补关系。

路线一的本质是借道标准格式。百度脑图官方支持导出Markdown、OPML、Text等格式,思源笔记又能直接吃Markdown和OPML,所以理论上这就是一条官方接口对官方接口的通道,不需要写任何代码。

路线二的本质是直接啃原始数据。当百度脑图的导出功能受限,或者你需要批量处理几十上百张脑图,又或者你对导出结果里的图片链接、备注丢失忍无可忍时,直接解析KityMinder JSON反而是一条更可控的路。脚本可以统一跑批,输出结构整齐的Markdown文档。

我建议普通用户先试路线一,遇到解决不了的问题再切换到路线二。但如果你平时就有脚本处理数据的习惯,路线二的效率和可定制性会明显更高。下面把两条路线的实操细节分开讲。

2. 方法一:导出再导入,五分钟搞定的"傻瓜式"迁移

这条路线的核心操作就三步:在百度脑图里导出中转文件,在思源笔记里导入或粘贴,然后对结果做必要的清理。听起来简单,实际做的时候有几个细节需要留意,不然容易出现层级错乱和内容丢失的问题。

2.1 从百度脑图导出适合中转的文件

在百度脑图编辑页的右上角,点击菜单按钮(那排小图标里找),选择"导出"子菜单,会看到支持导出的格式列表:Markdown、OPML、Text、XMind、FreeMind、PNG、SVG等。

这里的选择要动点脑筋。思源笔记对Markdown的支持最完善,所以首选导出Markdown。百度脑图导出的Markdown会用缩进列表的形式呈现脑图的树形结构,中心主题变成一级列表项,分支主题变成缩进的子列表,逻辑上能保住层级关系。

OPML也是不错的选择,特别是当你的脑图里包含了大量备注信息时,OPML可以更好地保留属性字段。但实测下来,OPML导入思源后,样式还原度不如Markdown粘贴来得干净。

Text格式则要谨慎使用,它导出的是纯文本缩进结构,虽然也能看,但层级识别完全依赖缩进的空格数,一旦某些节点文字里本身就带换行或空格,层级判断就乱了。

我实测过一张大约两百个节点的中型脑图,导出Markdown后的文件不到40KB,思源导入时完全没有压力。但如果你脑图里有大量图片节点,导出的Markdown里图片会以远程URL的形式存在,后续能不能正常显示,取决于网络环境以及你是否对图片做了额外处理。

2.2 在思源笔记里吃进这批文件

拿到Markdown文件后,接下来的操作分两种方式。

方式是直接在思源笔记里新建一个文档,然后把.md文件的内容全选复制,在思源编辑器里右键选择"粘贴为Markdown"。思源会解析粘贴内容里的Markdown语法,把列表缩进转换成对应的层级结构。实测下,百度脑图导出的Markdown基本能被正确还原成树形结构,嵌套层级、列表符号都不会出错。

另一种方式是把.md文件直接拷贝到思源笔记的工作空间数据目录下。思源的工作空间里有一个data文件夹,下面按文档树结构存放各个.md文件。你把文件放进去后,回到思源界面刷新,文档就会出现在对应的位置。这种方式的优点在于可以批量处理——一次性拷贝多个文件,刷新后全部识别。

不过要提醒一句,工作空间目录的结构不是随便放就能被识别的,它需要遵循思源自己的文档路径规则。如果你只是想导入单个文件,直接在思源里用"导入"功能最省心;如果你想批量塞入一整个分类目录,那还是先建好文档树再拷贝文件,避免目录层级错乱。

2.3 方法一的翻车点:图片、层级、特殊字符

路线一虽然简单,但翻车的地方不少,我把自己踩过的坑列出来,你们操作时能避开就避开。

图片丢失是最大的坑。百度脑图导出的Markdown,图片节点的内容会写成类似![image](http://...)...的网络链接。如果你的网络环境不稳定,或者百度脑图服务器对图片做了访问限制,导入思源后图片就裂了。解决办法是先在浏览器里把图片全部下载到本地,再在导出的Markdown里把远程链接替换成本地路径。批量替换用编辑器正则就能搞定,不值得为这个手改。

层级错乱也容易出现。我遇到过一种情况:百度脑图里某个节点的文字很长,包含了换行符,导出Markdown时这个换行符被直接保留下来,导致思源解析时认为这个节点下面多了一层子节点,结构立刻乱掉。遇到这种情况,只能在导入后手动检查明显异常的节点,或者回到百度脑图里把长文本节点里的换行清理掉再导出。

特殊字符同样需要留意。如果节点文字里包含#、[]、()这类Markdown保留字符,直接粘贴进思源后,部分字符会被误解析成标题、链接等结构。轻则显示奇怪,重则影响整篇文档的解析。最稳妥的做法是:导入后逐个检查带有特殊符号的节点,或者提前在文本层面做一轮转义处理。

路线一适合紧急迁移,但如果你对数据完整性有较高要求,或者要一次性处理几十张图,还是建议直接看路线二,脚本处理能规避掉上面这些问题中的大部分。

3. 方法二:直接解析KityMinder JSON,用脚本批量转成思源文档

如果你手头有几十张百度脑图,或者你导出的Markdown总在图片和层级上出问题,那么别折腾官方导出了,直接干掉中间环节,去解析百度脑图的原始数据文件。这套思路的本质是:把KityMinder JSON当作输入源,将树形结构转换成思源笔记能识别的Markdown文档,再批量导入。

3.1 KityMinder JSON结构拆解

在写脚本之前,必须吃透数据格式。下面是百度脑图文件的一个简化示例,包含了一个根节点和两个子节点:

{ "root": { "data": { "text": "中心主题", "expandState": 1, "image": { "url": "https://example.com/image.png", "title": "配图", "width": 200, "height": 150 } }, "children": [ { "data": { "text": "分支主题A", "priority": 1 }, "children": [ { "data": { "text": "子节点A1" } } ] }, { "data": { "text": "分支主题B", "note": "备注内容" } } ] }, "template": "default", "theme": "fresh-blue" }

节点的核心字段包括:

  • text:节点显示文本,最基本的字段,迁移时必取。
  • image:图片信息对象,包含URL、宽高等,如果需要保留图片,这里就是来源。
  • priority:优先级图标,一般保留不了,但可以通过文本前缀(如"【高】")来模拟。
  • note:备注信息,思源中的对应物是Markdown的引用块或普通段落,可以拼在节点文本下方。
  • children:子节点数组,递归遍历的依据。

理解了这个结构,脚本的大方向就清晰了:用深度优先遍历,先输出当前节点的文本,再根据层级深度决定缩进量,遇到children就递归处理,遇到note就在节点下面补一行引用块,遇到image就输出成图片语法。

3.2 转换脚本的完整实现

我用的Python环境,在Deepin上跑脚本没有任何障碍。下面给出一份可以直接用的转换脚本,它能把.cm(百度脑图导出的JSON文件)转换成包含该脑图全部内容的Markdown文件:

import json import sys import datetime def parse_node(node, depth, md_lines): """递归解析KityMinder节点,输出Markdown列表""" data = node.get("data", {}) text = data.get("text", "").strip() if not text: text = "未命名节点" # 生成缩进前缀,用两个空格表示一层 indent = " " * depth md_lines.append(f"{indent}- {text}") # 处理备注信息 note = data.get("note", "").strip() if note: # 在节点下方添加引用块样式的备注 note_lines = note.split("\n") for nl in note_lines: md_lines.append(f"{indent} > {nl}") # 处理图片信息 image = data.get("image") if image and image.get("url"): img_url = image["url"] img_title = image.get("title", "image") md_lines.append(f"{indent} ![placeholder]({img_url})") # 递归处理子节点 children = node.get("children", []) for child in children: parse_node(child, depth + 1, md_lines) def convert_cm_to_md(cm_file, md_file): """将KityMinder JSON文件转换为Markdown""" with open(cm_file, "r", encoding="utf-8") as f: data = json.load(f) root = data.get("root", {}) md_lines = [] # 给导出的文档增加一个标题,取自根节点文字 root_text = root.get("data", {}).get("text", "思维导图") md_lines.append(f"# {root_text}") md_lines.append("") md_lines.append(f"> 由百度脑图迁移,转换时间:{datetime.date.today()}") md_lines.append("") parse_node(root, 0, md_lines) with open(md_file, "w", encoding="utf-8") as f: f.write("\n".join(md_lines)) print(f"转换完成:{md_file}") print(f"共输出 {len(md_lines)} 行内容") if __name__ == "__main__": if len(sys.argv) != 3: print("用法:python3 cm2md.py <输入.cm文件> <输出.md文件>") sys.exit(1) convert_cm_to_md(sys.argv[1], sys.argv[2])

这个脚本的核心逻辑不复杂,但有几个细节我特意做了处理:

第一个是root节点的处理。百度脑图的根节点通常是一个没有子级中心主题,如果直接把它当作列表项输出,生成的Markdown开头会多出一个孤零零的列表项。我选择把根节点文字提取出来,作为文档的一级标题,这样既利用了根节点信息,又避免了层级上的冗余。

第二个是备注的格式。思源笔记的编辑器对引用块解析很成熟,>开头的行会被渲染成引用样式。我把备注逐行拼到节点文本下方,并用缩进保证它视觉上隶属于该节点。这样在思源里打开文档,备注信息也能一眼看出来。

第三个是图片的降级处理。脚本里的![placeholder](图片URL)保留了图片链接,但要注意:百度脑图里的图片URL是临时生成的授权链接,有时效性。如果你直接把文件导入思源,过一段时间图片链接可能失效。更稳妥的做法是,脚本运行前先用浏览器或下载工具把图片批量保存到本地,再在生成的Markdown里用正则替换成相对路径。

3.3 如何把结果安全导入思源

脚本输出的是一个个独立的Markdown文档。导入思源有两种方式,我都实测过。

一种是新建文档后粘贴内容。打开思源,在左侧文档树里定位到目标位置,新建文档,把生成的Markdown全选复制,右键"粘贴为Markdown"。这种方式适合单张脑图迁移,操作直观。

另一种是批量文件导入。思源在设置里提供了导入功能,可以直接导入Markdown文件。对于几十张脑图,你可以把脚本生成的.md文件全部收集到一起,用思源的批量导入一次性完成。实测中批量导入几十个文件,思源的处理速度和稳定性都表现不错,唯一的风险是导入后的文档名可能和你预期不一致——脚本里是用根节点文字作为标题,如果多个脑图的根节点文字相同,会产生同名文档,需要在导入前统一重命名。

这里要特别提醒,导入完成后务必抽查几篇文档,重点看三层以上的嵌套结构是否被正确缩进、备注是否出现在正确的位置。思源对列表嵌套的解析逻辑和百度脑图有细微差异,偶尔会出现层级排序错位的情况。我在实测中就遇到过某个四级子节点被思源识别成三级的情况,抽查能帮你尽早发现问题,避免日后再返工。

4. 实测对比与经验总结:选哪条路,看什么条件

两条路线都实际操作过之后,最终的取舍并不是"哪个更先进",而是"哪个更适合你的现状"。我做了个对比,帮助你在动手前快速定位。

对比维度方法一:官方导出方法二:JSON脚本解析
操作门槛低,无需代码中,需要Python基础
单张脑图耗时5分钟以内脚本配置好后1分钟内
批量处理能力差,需逐张操作强,一次性跑批
图片保留依赖网络链接,易失效可控,可配合本地图片路径
备注信息部分丢失可完整保留
层级结构基本保留,但易受换行影响严格按JSON层级输出,可控性强
特殊字符处理导入后易误解析可在脚本里提前转义
适用场景少量脑图、急需迁移大量脑图、对数据完整性要求高

这张表基本能回答选哪条路的问题了。如果你只是想把一两张常用的脑图搬到思源里,完全没有必要为了写脚本花半小时;但如果你手头有几十张积累了多年的脑图,方法二的性价比优势会非常明显。

4.1 两条路线的适用边界

方法一的边界在于"量"和"质"的双重限制。量上,每次操作都要打开百度脑图、选择导出、再切换思源导入,五十张图光操作时间就够你喝一壶;质上,遇到长文本换行、图片链接失效、特殊字符误解析这"三大拦路虎",每处理一个问题都要回到源文件修改,效率极低。

方法二的边界则在于你是否具备基础的脚本阅读能力。虽然脚本我已经写好了,但实际使用中你大概率需要根据自己的脑图结构调整细节,比如某些节点有priority字段要转成文本前缀,或者某些节点有自定义属性需要特殊处理。这些都需要你读懂代码才能改。如果你完全不会编程,又不想学,那还是老老实实走方法一。

另一个容易被忽视的边界是数据规模。如果你的脑图里包含大量图片节点,方法二中的图片URL问题在批量导入时会成为瓶颈——几十张图你还能手动下载,几百张图就需要写爬虫脚本了。所以我的建议是:对于图片密集型脑图,不管用哪种方法,都要提前做好图片资产的独立备份,不要把希望全寄托在迁移脚本上。

4.2 迁移后必做的三项整理

无论用哪条路线,迁移到思源之后都别急着把百度脑图清空,先花十分钟做三件事。

第一件事是建立双链链接。思源笔记的核心能力是双链,但迁移过来的文档只是普通的树形结构,没有任何链接关系。你需要根据脑图内容之间的关联,手动在相关文档里加上[[链接]]。这一步是思维导图向知识库升级的关键,也是迁移的最大增值点。

第二件事是统一文档命名。百度脑图的节点文字在迁移后大概率会被思源直接用作文档标题,但这些标题未必符合你的笔记体系规范。趁内容还热乎,批量调整文档命名,把命名规则统一成"主题-子主题"或者"日期-主题"这样的格式,日后查找会轻松很多。

第三件事是整理标签体系。百度脑图里同一主题下的分支,其实已经暗示了潜在的标签关系。你可以把一级分支的名称提取出来,作为文档的标签打上去。比如一个"产品规划"的脑图拆成了"需求分析"、"技术方案"、"排期计划"三个分支,那迁移后的三篇文档就可以分别打上对应的标签。

4.3 几个值得记录的实操细节

最后分享几个操作中的小经验,都是实打实踩出来的。

在Deepin/UOS上安装思源笔记,记得去官网下载对应的deb包,安装时用sudo dpkg -i命令,如果提示依赖缺失,补一句sudo apt -f install就能解决。有段时间思源笔记的Linux版本对中文字体渲染优化不好,如果发现字体发虚,可以在系统设置里安装fonts-noto-cjk字体包,效果立竿见影。

批量转换脚本在Deepin下运行,文件路径最好不要包含中文和空格符号,否则部分Python版本在读取sys.argv参数时容易出编码问题。如果你一定要放在中文目录,可以在脚本里用os.path模块手动拼接路径,绕开命令行参数解析。

另外,百度脑图的.cm文件用文本编辑器打开时,如果看到乱码,不用慌,那是JSON里的Unicode转义字符,我建议直接把文件拖进Python脚本处理,不要在编辑器里强行编辑。脚本读出来的是纯文本结构,字符编码问题交给Python的utf-8默认处理即可。

整个迁移过程做下来,我最大的感受是:百度脑图作为云端工具在快速记录和分享场景下依然好用,但如果你追求的是长期、稳固、可自由组合的知识资产,把内容沉淀到思源笔记这样的本地知识库里才是更踏实的选择。数据握在自己手里,后续怎么组织、怎么链接,主动权就完全由你掌控了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询