xmind文件数据解析重构成mindmap可识别数据
【需求背景】
- 测试平台开发中,需要引入前端mindmap模块,进行在线xmind实时解析并前端展示
【卡点难点】
- 选取什么库进行xmind解析
- 如何转换成mindmap可以识别的数据
【xmind解析】
- 直接选用官方xmind-sdk-python,发现已经2018后停止维护了,解析最新版本报无法识别错误,弃用
- 直接去github上查最新维护的库,发现xmindparser库还可以使用,且方法简便易于上手,以下是内置api
is_xmind_zen #是否为xmind文件
xmind_to_dict #解析xmind成为字典
xmind_to_json #解析xmind成为json
xmind_to_xml #解析xmind成为xml
xmind_to_file #解析xmind成为json或xml,其余报错
点击查看代码
import xmindparser
path = r"xxx.xmind"
print(xmindparser.is_xmind_zen(path)) #判断是否xmind文件
print(xmindparser.xmind_to_dict(path)) #解析成字典
print(xmindparser.xmind_to_json(path)) #解析成json
print(xmindparser.xmind_to_xml(path)) #解析成xml
print(xmindparser.xmind_to_file(path,'json')) #解析成json
【转换mindmap数据】
- 通过查询mindmap的文档,数据与xmind文档解析出来的不一致
xmind解析数据结构如下:
点击查看代码
[
{
"title": "画布 1",
"topic": {
"title": "主题",
"topics": [
{
"title": "子题主",
"topics": [
{
"title": "孙主题",
"topics": [
{
"title": "孙孙主题",
"topics": [
{
"title": "叶子节点"
}
]
}
]
}
]
}
]
},
"structure": "org.xmind.ui.logic.right"
}
]
而mindmap数据结构如下:
点击查看代码
[
{
"name": "主题",
"children": [
{
"name": "子题主",
"children": [
{
"name": "孙主题",
"children": [
{
"name": "孙孙主题",
"children": [
{
"name": "叶子节点",
}
],
}
],
}
],
}
],
}
]
【算法思路】
- 通过观察可知,两者只是key不同,需要title换成name,topics换成children即可
【方案一】
直接暴力replace替换
点击查看代码
data = xmindparser.xmind_to_dict(file)
res = [eval(str(data).replace('title','name').replace('topics','children'))[0]['topic']]
print(res)
【方案二】
由于层级不确定,使用递归更加优雅高级
点击查看代码
data = xmindparser.xmind_to_dict(path)
def recursion(data):
# 不存在topics则是叶子节点直接返回
if not data.get('topics',None):
return {'name':data['title']}
return {'name':data['title'],'children':[recursion(topic) for topic in data['topics']]}
res = [{'name':i['title'],'children':[recursion(i['topic'])]} for i in data]
print(res)
【总结】
这里利用递归方法解决了一个数据结构重构的算法,最终效果如图。

——每日进步亿点点,每年钱包鼓点点
xmind文件数据解析重构成mindmap可识别数据的更多相关文章
- 070.Python聚焦爬虫数据解析
一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...
- Java数据解析之JSON
文章大纲 一.JSON介绍二.常见框架介绍与实战三.Studio中GsonFormat插件使用四.项目源码下载(含参考资料)五.参考文档 一.JSON介绍 1. 简介 JSON 的全称是 Ja ...
- GPS数据解析
1.摘要 GPS模块使用串口通信,那么它的的数据处理本质上还是串口通信处理,只是GPS模块的输出的有其特定的格式,需要字符串处理逻辑来解析其含义.如何高效的处理从GPS模块接收到的数据帧,是GPS驱动 ...
- 提效工具-python解析xmind文件及xmind用例统计
现状 每个公司都有一个维护测试case的系统,有自研的也有买的,比如QC, 禅道等等,QA往往习惯使用xmind等思维导图工具来编写测试用例,因为思路清晰,编写方便,那么这就有一个问题,大多公司要求所 ...
- 【spark】文件读写和JSON数据解析
1.读文件 通过 sc.textFile(“file://") 方法来读取文件到rdd中. val lines = sc.textFile("file://")//文件地 ...
- Unity3d-XML文件数据解析&JSON数据解析
1.XML文件数据解析:(首先须要导入XMLParser解析器,The latest released download from:http://dev.grumpyferret.com/unity/ ...
- Plist文件与数据解析
综述 初步阶段当我们做个需要点数据的练习时(比如购物商品展示),我们可能是将数据直接写在代码中,比如说定义一个字符串数组或存放字典的数组.但这其实并不是一种合理的做法.因为如果当数据修改的时候,就要经 ...
- 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件
小程序导入,别人导出的数据库json文件,错误信息如下: 导入数据库失败, Error: Poll error, 导入数据任务(id:373985)异常,错误信息:解析导入文件错误,请检查导入文件内容 ...
- 重新装Mysql后原来数据的恢复办法:即一个版本的mysql的data文件夹下的所有的数据,怎么去加载到另一个安装的mysql中
重新装Mysql后原来数据的恢复办法本博客:http://blog.csdn.net/xiaowu_zhu/article/details/71188955 不管是重新装系统或者数据库时,总会遇到怎么 ...
- PE文件结构部分解析以及输入的定位
原文链接地址:http://www.cnblogs.com/shadow-lei/p/3554670.html PE文件定义 PE 文件("Portable executable" ...
随机推荐
- JavaSE线程基础
1.线程概念 2.线程创建方式 1.继承thread 2.实现runnable runnable使用最多 3.线程的生命周期及线程的状态 新建状态 就绪状态的线程(已获得所有资源,栈堆内存空间),即s ...
- 解决google翻译出错问题
解决google翻译问题 一.为什么失效 因为google把google翻译的API给关闭了,导致翻译不了. 据网上说是服务器耗钱,但盈利不够导致的. 二.可修复的前提 国内还存有服务器可以用API ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-3-离线搭建playwright环境
1.简介 有些小伙伴或者童鞋们私信留言说自己是在公司局域网办公,或者公司为了安全对网络管控比较严格(尤其是一些大的国企.央企),总之就是一句话无法连到外网去在线下载,宏哥刚看到留言时觉得这问题还留言问 ...
- 效率神器,边看网页边问ChatGPT!神级ChatGPT插件(浏览器扩展)推荐!
如果在看一个网页时,有些词不认识.句子不知道含义,怎么办? 憨憨版:不认识就算了呗,还能咋滴 进阶版:复制到 Google/Baidu 里问一问: AI达人版:复制到 ChatGPT/Claude 里 ...
- Bean生命周期的扩展点:Bean Post Processor
摘要:在本篇文章中,我们将深入探讨Spring框架中的重要组件--BeanPostProcessor.首先,我们将了解其设计理念和目标,然后通过实际的例子学习如何基础使用它,如何通过BeanPostP ...
- 微调用于多语言 ASR 的 MMS 适配器模型
新内容 (06/2023): 这篇博文受到 "在多语言 ASR 上微调 XLS-R" 的强烈启发,可以看作是它的改进版本. Wav2Vec2 是自动语音识别 (ASR) 的预训练模 ...
- 使用libswresample库实现音频重采样
一.初始化音频重采样器 在音频重采样时,用到的核心结构是SwrContext,我们可以通过swr_alloc()获取swr_ctx实例,然后通过av_opt_set_int()函数和av_opt_se ...
- 基于 Surfel 的实时全局光照方案(Surfel-based Global Illumination)
目录 Global Illumination based on Surfels [SIGGRAPH 2021] Surfel 持久化存储 surfel 数据组成 surfel 回收机制 Surfeli ...
- 【阅读笔记】RAISR
RAISR: RAISR: Rapid and Accurate Image Super Resolution --Yaniv Romano, 2017(211 Citations) 核心思想 LR ...
- Java开发大型互联网-架构师必须掌握的分布式技术
Java开发大型互联网-架构师必须掌握的分布式技术 摘要:在当今互联网行业,随着用户量和业务的不断增长,大型互联网系统的设计和开发已经成为了一项头等重要的任务.作为架构师,要能够应对这样的挑战,就必须 ...