【Python】把指定组织形式的txt转换为xmind

人工智能训练通常需要使用文本格式,把基于训练之后的内容,让GLM大模型输出如下格式的文本:

weltestDemo|#|weltest|#|静态界面|#|输入|#|长度|#|不超过四位
weltestDemo|#|weltest|#|静态界面|#|输入|#|长度|#|不超过五位
weltestDemo|#|weltest|#|静态界面|#|输入|#|长度|#|不超过6位
weltestDemo|#|weltest|#|静态界面|#|输入2|#|不超过四位
weltestDemo|#|weltest|#|静态界面|#|输入2|#|不超过五位
weltestDemo|#|weltest|#|静态界面|#|输入2|#|不超过6位
weltestDemo|#|weltest|#|功能测试|#|输入|#|长度|#|不超过四位
weltestDemo|#|weltest|#|功能测试|#|输入|#|长度|#|不超过五位
weltestDemo|#|weltest|#|功能测试|#|输入|#|长度|#|不超过6位
weltestDemo|#|weltest|#|功能测试|#|输入2|#|不超过四位
weltestDemo|#|weltest|#|功能测试|#|输入2|#|不超过五位
weltestDemo|#|weltest|#|功能测试|#|输入2|#|不超过6位

如何把上述文本转换为xmind格式呢?

软件信息

python

python -v

Python 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)] on win32
依赖库

pip install XMind==1.2.0

xmind版本

XMind 8 Update 7 (R3.7.7.201801311814)

在这里插入图片描述

程序脚本

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import os,re
import xmind
def txt2Xmind(txt_file=r'weltestDemo.txt'):
    filename,_=os.path.splitext(os.path.basename(txt_file))
    print(filename)
    with open(txt_file,'r',encoding='UTF-8') as xfile:
        lines=xfile.readlines()
        if os.path.exists(f"{filename}.xmind"):
            os.remove(f"{filename}.xmind")
        wk = xmind.load(f"{filename}.xmind")
        rootset = lines[0].strip('\n').split('|#|')
        picture = wk.getPrimarySheet()
        picture.setTitle(rootset[0])
        root = picture.getRootTopic()
        root.setTitle(rootset[1])
        preitems=lines[0].strip('\n').split('|#|')
        current_topic=root
        for line in lines:
            items=line.strip('\n').split('|#|')
            last_index=len(set(items)&set(preitems))
            diff_record=len(set(items)-set(preitems))
            current_length=len(set(items))
            print(str(items)+str(current_length)+'items')
            print(str(preitems)+'preitems')
            #print(str(set(items)&set(preitems))+'inter')
            expect_topic_title=items[last_index-1]
            #print(current_topic.getTitle()+'root')
            if diff_record==0:
                for sub in items[2:]:
                    current_topic=current_topic.addSubTopic()
                    current_topic.setTitle(sub)
            else:
                root_index=preitems.index(root.getTitle())
                expect_index=preitems.index(expect_topic_title)
                #距离根节点的距离
                distance=expect_index-root_index
                tmp = root
                for i in range(1,distance+1):
                    subtopics=[item for item  in tmp.getSubTopics() if item.getTitle()==preitems[root_index+i]]
                    tmp=subtopics[0]
                    print(tmp.getTitle())

                current_topic=tmp
                for sub in items[current_length-diff_record:]:
                    current_topic=current_topic.addSubTopic()
                    current_topic.setTitle(sub)
            preitems = items
    xmind.save(wk, f"{filename}.xmind")

if __name__=="__main__":
    txt2Xmind()

操作演示

weltestDemo.txt
weltestDemo|#|weltest|#|静态界面|#|输入|#|长度|#|不超过四位
weltestDemo|#|weltest|#|静态界面|#|输入|#|长度|#|不超过五位
weltestDemo|#|weltest|#|静态界面|#|输入|#|长度|#|不超过6位
weltestDemo|#|weltest|#|静态界面|#|输入2|#|不超过四位
weltestDemo|#|weltest|#|静态界面|#|输入2|#|不超过五位
weltestDemo|#|weltest|#|静态界面|#|输入2|#|不超过6位
weltestDemo|#|weltest|#|功能测试|#|输入|#|长度|#|不超过四位
weltestDemo|#|weltest|#|功能测试|#|输入|#|长度|#|不超过五位
weltestDemo|#|weltest|#|功能测试|#|输入|#|长度|#|不超过6位
weltestDemo|#|weltest|#|功能测试|#|输入2|#|不超过四位
weltestDemo|#|weltest|#|功能测试|#|输入2|#|不超过五位
weltestDemo|#|weltest|#|功能测试|#|输入2|#|不超过6位

执行命令

调整脚本中文件名称为“weltestDemo.txt”,可以依据自己需要进行调整

(venv) PS D:\Python\xmind> python .\txt2xmind.py
weltestDemo
['weltestDemo', 'weltest', '静态界面', '输入', '长度', '不超过四位']6items
['weltestDemo', 'weltest', '静态界面', '输入', '长度', '不超过四位']preitems
['weltestDemo', 'weltest', '静态界面', '输入', '长度', '不超过五位']6items
['weltestDemo', 'weltest', '静态界面', '输入', '长度', '不超过四位']preitems
静态界面
输入
长度
['weltestDemo', 'weltest', '静态界面', '输入', '长度', '不超过6位']6items
['weltestDemo', 'weltest', '静态界面', '输入', '长度', '不超过五位']preitems
静态界面
输入
长度
['weltestDemo', 'weltest', '静态界面', '输入2', '不超过四位']5items
['weltestDemo', 'weltest', '静态界面', '输入', '长度', '不超过6位']preitems
静态界面
['weltestDemo', 'weltest', '静态界面', '输入2', '不超过五位']5items
['weltestDemo', 'weltest', '静态界面', '输入2', '不超过四位']preitems
静态界面
输入2
['weltestDemo', 'weltest', '静态界面', '输入2', '不超过6位']5items
['weltestDemo', 'weltest', '静态界面', '输入2', '不超过五位']preitems
静态界面
输入2
['weltestDemo', 'weltest', '功能测试', '输入', '长度', '不超过四位']6items
['weltestDemo', 'weltest', '静态界面', '输入2', '不超过6位']preitems
['weltestDemo', 'weltest', '功能测试', '输入', '长度', '不超过五位']6items
['weltestDemo', 'weltest', '功能测试', '输入', '长度', '不超过四位']preitems
功能测试
输入
长度
['weltestDemo', 'weltest', '功能测试', '输入', '长度', '不超过6位']6items
['weltestDemo', 'weltest', '功能测试', '输入', '长度', '不超过五位']preitems
功能测试
输入
长度
['weltestDemo', 'weltest', '功能测试', '输入2', '不超过四位']5items
['weltestDemo', 'weltest', '功能测试', '输入', '长度', '不超过6位']preitems
功能测试
['weltestDemo', 'weltest', '功能测试', '输入2', '不超过五位']5items
['weltestDemo', 'weltest', '功能测试', '输入2', '不超过四位']preitems
功能测试
输入2
['weltestDemo', 'weltest', '功能测试', '输入2', '不超过6位']5items
['weltestDemo', 'weltest', '功能测试', '输入2', '不超过五位']preitems
功能测试
输入2
(venv) PS D:\Python\xmind>
最后结果

在这里插入图片描述

现存问题

由下面两行代码实现,引入了一个问题:画布名称和主题名称不能一致,不然会提示越界情况

root_index=preitems.index(root.getTitle())
expect_index=preitems.index(expect_topic_title)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/686520.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

零基础打靶—Glasgow Smile靶场

一、打靶的主要五大步骤 1.确定目标:在所有的靶场中,确定目标就是使用nmap进行ip扫描,确定ip即为目标,其他实战中确定目标的方式包括nmap进行扫描,但不局限于这个nmap。 2.常见的信息收集:比如平常挖洞使用…

Xxl-Job二开踩坑记录

Xxl-Job踩坑记录 将xxl-job二次开发了,然后在对接于拓展功能的时候发现了一些xxl-job在使用或性能上隐藏的坑; 接口请求超时 起初是设定业务方通过http接口调用xxl-job的增删改接口完成对任务的数据操作; 因此直接使用了内置提供的 XxlJo…

GWT 与 Python App Engine 集成

将 Google Web Toolkit (GWT) 与 Python App Engine 集成可以实现强大的 Web 应用程序开发。这种集成允许你使用 GWT 的 Java 客户端技术构建丰富的用户界面,并将其与 Python 后端结合在一起,后端可以运行在 Google App Engine 上。 1、问题背景 在 Pyt…

【python进阶】python图形化编程之美--tkinter模块初探

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

B=2W,奈奎斯特极限定理详解

一直没搞明白奈奎斯特极限定理的含义,网上搜了很久也没得到答案。最近深思几天后,终于有了点心得。顺便吐槽一下,csdn的提问栏目,有很多人用chatgpt秒回这个事,实在是解决不了问题,有时候人的问题大多数都是…

javaweb的新能源充电系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,充电桩管理,报修管理,新能源公告管理 前台账户功能包括:系统首页,个人中心,充电桩,新…

QA测试开发工程师面试题满分问答26: Cookie、Session、Token和JWT的定义、区别和使用场景

这是一个非常常见的面试题,需要全面掌握 Cookie、Session、Token 和 JWT 的定义和使用场景,以及它们之间的区别。下面是一个详细的满分回答: Cookie: 定义: Cookie 是一种存储在客户端(通常是浏览器)的小型文本文件,用于在客户端与服务器之间保持会话状态。使用场景: 常用于保存…

参数传递和剪枝,从修剪二叉树谈起

669. 修剪二叉搜索树 - 力扣(LeetCode) 一、参数传递 Java中的参数传递方式只有一种,那就是值传递。如果我们传的是基本数据类型,那么函数接收到的就是该数据的副本,如果我们传的是对象,那么函数接收到的就…

fastapi学习前置知识点

前置知识点 FastApi:一个用于构建API的现代、快速(高性能)的web框架。 FastApi是建立在Pydantic和Starlette基础上,Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/工具包…

数据库(26)——多表查询——内连接与外连接

内连接 内连接查询的是两张表交集的部分 语法 隐式内连接 SELECT 字段列表 FROM 表1,表2 WHERE 条件...; 显式内连接 SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...; 演示 查询每个user的姓名,以及他们的status状态(隐式内…

【计算机网络基础知识】

首先举一个生活化的例子,当你和朋友打电话时,你可能会使用三次握手和四次挥手的过程进行类比: 三次握手(Three-Way Handshake): 你打电话给朋友:你首先拨打你朋友的电话号码并等待他接听。这就…

添加图片到资源文件,QPixmap ,QSplash的用法

实现1个QSplash加载之后&#xff0c;呈现主窗体的效果 1、创建资源文件&#xff0c;添加Splash.png文件 2、main.cpp 编码实现 将图像添加资源文件&#xff0c;复制文件的路径 main.cpp :/img/Splash.png 为资源的文件路径 #include "mainwindow.h" #include <…

51单片机在八位数码管上显示自己学号后八位

1、功能描述 在八位数码管上显示自己学号后八位 2、实验原理 数码管就是通过线路将各个LED灯连接在一起。 P2控制LED的段选&#xff0c; P0控制LED位选。读取时从低位向高位读取&#xff0c;P2_2为高位P2_4为地位&#xff0c;例如P2_4 1; P2_3 0; P2_2 1&#xff0c;那么…

高效学习LabVIEW的方法

学习LabVIEW可以通过系统化课程、在线资源、自学实验、参与论坛、结合实际项目等多角度进行。系统课程提供全面基础&#xff0c;在线资源便于查漏补缺&#xff0c;自学实验强化理解&#xff0c;论坛互动解决疑难&#xff0c;结合实际项目应用提高实践技能。结合项目学习是最高效…

举个栗子!Quick BI 技巧(8):柱形图的制作及应用

众所周知&#xff0c;在数据分析中&#xff0c;柱形图是利用率非常高的一种图&#xff0c;主要是用于比较各组数据之间的差别&#xff0c;并且可以显示一段时间内的数据变化情况。那么在 Quick BI 中要如何来制作柱形图呢&#xff1f; 今天的栗子&#xff0c;我们就来分享如何…

RE_RC4加密

之前做的几道题目&#xff0c;rc4也是经常遇到&#xff0c;今来系统学学&#xff0c;记录一下 对称加密&#xff0c;即加密和解密的密钥可以相互推导&#xff0c;也有的是相同的。 RC4 是以字节流处理每一个字节&#xff0c;而不是 DES 的分组操作。 包含三个参数&#xff1…

ctfshow web

红包题第二弹 <?phpif(isset($_GET[cmd])){$cmd$_GET[cmd];highlight_file(__FILE__);if(preg_match("/[A-Za-oq-z0-9$]/",$cmd)){die("cerror");}if(preg_match("/\~|\!|\|\#|\%|\^|\&|\*|\(|\)|\&#xff08;|\&#xff09;|\-|\_|\{|\}|\…

详细分析Mysql临时变量的基本知识(附Demo)

目录 前言1. 用户变量2. 会话变量 前言 临时变量主要分为用户变量和会话变量 1. 用户变量 用户变量是特定于会话的&#xff0c;在单个会话内可以在多个语句中共享 以 符号开头在 SQL 语句中使用 SET 语句或直接在查询中赋值 声明和赋值 SET var_name value; -- 或者 SE…

前端开发环境:Vue、Element Plus、Axios

目录 1. Vue简介 2. Element Plus简介 3. Axios简介 4. 创建Vue项目 4.1 Node.js安装 4.2 创建Vue项目 4.3 Vue项目的结构 4.4 安装Element-Plus 4.5 安装Axios 4.6 解决跨域问题 5. 应用实例 5.1 创建Vue组件 5.2 配置路由 5.3 配置根组件 5.4 启动前端应用服…

DBeaver入门教学,开源免费,链接数据库的软件

这个可爱的头像就是它 为什么要用这个&#xff0c;小公司一般都用navicat什么的&#xff0c;因为别人一般不会告你&#xff0c;因为告你也没啥钱&#xff0c;但是公司大了有知名度了&#xff0c;用盗版软件就会被告。所以很多好不容易从小做到大的公司&#xff0c;是不允许这种…