python xmind 包使用详解(其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题)

pip install xmind 使用

場景 xmind8 可以打开 xmind2020 报错
main_fest.xml(xmind8 打开另存后 更改后缀为.zip 里边包含META-INF/manifest.xml)

** 将xmind文件修改后缀为zip ---->解压---->放入main_fest.xml —>压缩为zip —>修改后缀为xmind**

import xmind
import os
import re
import shutil
import zipfile
from xmind.core.const import TOPIC_DETACHED
from xmind.core.markerref import MarkerId
from xmind.core.topic import TopicElement

def extract(d_path, f_path, mode="zip"):
    """
    zip解压缩乱码问题处理
    :param d_path:
    :param f_path:
    :return:
    """
    root = d_path
    if not os.path.exists(root):
        os.makedirs(root)

    if mode == 'zip':
        zf = zipfile.ZipFile(f_path,"r")
    elif mode == 'rar':
        zf = rarfile.RarFile(f_path,"r")

    for n in zf.infolist():
        srcName = n.filename
        try:
            decodeName = srcName.encode("cp437").decode("utf-8")
        except:
            try:
                decodeName = srcName.encode("cp437").decode("gbk")
            except:
                decodeName = srcName
        spiltArr = decodeName.split("/")
        path = root
        for temp in spiltArr:
            path = os.path.join(path, temp)

        if decodeName.endswith("/"):
            if not os.path.exists(path):
                os.makedirs(path)
        else:
            if not os.path.exists(os.path.dirname(path)):
                os.makedirs(os.path.dirname(path))
            f = open(path, "wb")
            f.write(zf.read(srcName))
            f.close()
    zf.close()

def aftertreatment(path):
    """
    **場景 xmind8 可以打开 xmind2020 报错
    main_fest.xml(xmind8 打开另存后 更改后缀为.zip  里边包含META-INF/manifest.xml)
    xmind 修改后缀为zip ----》解压---- 》放入main_fest.xml  --- 》压缩zip  修改后缀为xmind**
    """
    # 修改名字
    retval = os.path.dirname(os.path.abspath(__file__))
    folder = os.path.dirname(path)
    name = os.path.basename(path)
    unzip_folder = os.path.splitext(name)[0]
    zip_name = unzip_folder + ".zip"
    os.chdir(folder)
    os.rename(name, zip_name)
    os.chdir(retval)
    # 解压
    unzip_path = os.path.join(folder, unzip_folder)
    if not os.path.exists(unzip_path):
        os.mkdir(unzip_path)

    inf_folder = os.path.join(unzip_path, "META-INF")
    if not os.path.exists(inf_folder):
        os.mkdir(inf_folder)

    extract(unzip_path, os.path.join(folder, zip_name))
    shutil.copyfile("./META-INF/manifest.xml", os.path.join(inf_folder, "manifest.xml"))
    os.remove(os.path.join(folder, zip_name))
    shutil.make_archive(unzip_path, 'zip', unzip_path)
    file_path = unzip_path + '.zip'
    print(file_path)
    os.chdir(os.path.dirname(file_path))
    os.rename(os.path.basename(file_path), name)
    os.chdir(retval)
    shutil.rmtree(unzip_path)

def gen_xmind_file(data, path):
    # load an existing file or create a new workbook if nothing is found
    workbook = xmind.load(path)
    # get the first sheet(a new workbook has a blank sheet by default)
    sheet1 = workbook.getPrimarySheet()
    # design_sheet1(sheet1)
    # create sheet2
    gen_sheet2(workbook, sheet1, data)
    # now we save as test.xmind
    xmind.save(workbook, path=path)
    # 修复
    aftertreatment(path)

def recursive(children, node, workbook):
    if len(children) == 0:
        return
    for c in children:
        t = TopicElement(ownerWorkbook=workbook)
        t.setTitle(c["data"]["text"])
        if len(c["children"]):
            recursive(c["children"], t, workbook)
        node.addSubTopic(t)

def gen_sheet2(workbook, sheet2, data):
    # ***** second sheet *****
    # create a new sheet and add to the workbook by default
    # sheet2 = workbook.createSheet()
    center = data["root"]["data"]["text"]
    sheet2.setTitle(center)

    # a sheet has a blank sheet by default
    root_topic2 = sheet2.getRootTopic()
    root_topic2.setTitle(center)

    topics = data["root"]["children"]
    for t in topics:
        # use other methods to create some sub topic element
        topic = TopicElement(ownerWorkbook=workbook)
        # set a topic hyperlink from this topic to the first sheet given by s1.getID()
        # topic1.setTopicHyperlink(sheet1.getID())
        # print(t["data"]["text"], t["data"]["layout_mind_offset"]["x"], t["data"]["layout_mind_offset"]["y"])
        topic.setTitle(t["data"]["text"])  # set its title
        # topic.setPosition(t["data"]["layout_mind_offset"]["x"], t["data"]["layout_mind_offset"]["y"])
        recursive(t["children"], topic, workbook)
        root_topic2.addSubTopic(topic)

if __name__ == '__main__':

    data = {
        "root": {
            "data": {
                "id": "c1jsg864saw0",
                "created": 1585126506413,
                "text": "新手指南",
                "color": "#000000",
                "font-weight": "bold",
                "font-size": 32
            },
            "children": [
                {
                    "data": {
                        "id": "c1jsisau8rc0",
                        "created": 1585126706961,
                        "text": "节点操作",
                        "expandState": "expand",
                        "layout_mind_offset": {
                            "x": 36,
                            "y": 93
                        },
                        "background": "#ffc000",
                        "font-size": 22,
                        "color": "#000000",
                        "font-weight": "bold",
                        "layout_right_offset": {
                            "x": -48,
                            "y": -39
                        },
                        "icon": "youxian_01"
                    },
                    "children": [
                        {
                            "data": {
                                "id": "c1jslg11qzk0",
                                "created": 1585126915340,
                                "text": "插入节点",
                                "font-size": 18,
                                "color": "#ffc000",
                                "layout_right_offset": {
                                    "x": 96,
                                    "y": -95
                                },
                                "background": "#404040",
                                "font-weight": "bold",
                                "icon": "qizhi_01"
                            },
                            "children": [
                                {
                                    "data": {
                                        "id": "c1jsn3rlhbc0",
                                        "created": 1585127045376,
                                        "text": "下级:快捷键【Tab】 ",
                                        "font-size": 18,
                                        "color": "#ffc000",
                                        "layout_right_offset": {
                                            "x": 27,
                                            "y": -12
                                        },
                                        "background": "transparent"
                                    },
                                    "children": [

                                    ]
                                },
                                {
                                    "data": {
                                        "id": "c1jso0dk2cg0",
                                        "created": 1585127116361,
                                        "text": "同级:快捷键【Enter】 ",
                                        "font-size": 18,
                                        "color": "#ffc000",
                                        "layout_right_offset": {
                                            "x": 27,
                                            "y": 0
                                        },
                                        "background": "transparent"
                                    },
                                    "children": [

                                    ]
                                },
                                {
                                    "data": {
                                        "id": "c1jsp3q5g4g0",
                                        "created": 1585127202017,
                                        "text": "上级:快捷键【Shift + Tab】",
                                        "font-size": 18,
                                        "color": "#ffc000",
                                        "layout_right_offset": {
                                            "x": 30,
                                            "y": 13
                                        },
                                        "background": "transparent"
                                    },
                                    "children": [

                                    ]
                                }
                            ]
                        },
                        {
                            "data": {
                                "id": "c1jslivsluw0",
                                "created": 1585126921553,
                                "text": "移动节点",
                                "font-size": 18,
                                "color": "#fabf8f",
                                "expandState": "expand",
                                "layout_right_offset": {
                                    "x": 97,
                                    "y": -36
                                },
                                "background": "#404040",
                                "font-weight": "bold"
                            },
                            "children": [
                                {
                                    "data": {
                                        "id": "c1jsqis0d540",
                                        "created": 1585127313145,
                                        "text": "上移:快捷键【Alt + ↑ 】",
                                        "background": "transparent",
                                        "font-size": 18,
                                        "color": "#fbd4b4",
                                        "layout_right_offset": {
                                            "x": 32,
                                            "y": -12
                                        }
                                    },
                                    "children": [

                                    ]
                                },
                                {
                                    "data": {
                                        "id": "c1jsqjz54o80",
                                        "created": 1585127315753,
                                        "text": "下移:快捷键【Alt + ↓ 】",
                                        "font-size": 18,
                                        "color": "#fbd4b4",
                                        "layout_right_offset": {
                                            "x": 31,
                                            "y": 0
                                        },
                                        "background": "transparent"
                                    },
                                    "children": [

                                    ]
                                },
                                {
                                    "data": {
                                        "id": "c1jsqkfoncw0",
                                        "created": 1585127316753,
                                        "text": "收起/展开:快捷键【 / 】",
                                        "font-size": 18,
                                        "color": "#fbd4b4",
                                        "layout_right_offset": {
                                            "x": 34,
                                            "y": 13
                                        },
                                        "background": "transparent"
                                    },
                                    "children": [

                                    ]
                                }
                            ]
                        },
                        {
                            "data": {
                                "id": "c1jt8kpu4x40",
                                "created": 1585128727922,
                                "text": "文字换行   ",
                                "expandState": "expand",
                                "font-size": 18,
                                "layout_right_offset": {
                                    "x": 103,
                                    "y": 25
                                },
                                "color": "#ffc000",
                                "background": "#404040",
                                "font-weight": "bold",
                                "icon": "star_02"
                            },
                            "children": [
                                {
                                    "data": {
                                        "id": "c1jt94rf40w0",
                                        "created": 1585128771553,
                                        "text": "快捷键【Shift + Enter 】",
                                        "font-size": 18,
                                        "layout_right_offset": {
                                            "x": 13,
                                            "y": -1
                                        },
                                        "color": "#ffc000"
                                    },
                                    "children": [

                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    "data": {
                        "id": "c1jswayqnqo0",
                        "created": 1585127766323,
                        "text": "画布操作",
                        "layout_mind_offset": {
                            "x": -737,
                            "y": -222
                        },
                        "font-size": 22,
                        "background": "#e5dfec",
                        "color": "#000000",
                        "font-weight": "bold",
                        "layout_right_offset": {
                            "x": 29,
                            "y": 83
                        }
                    },
                    "children": [
                        {
                            "data": {
                                "id": "c1jswgwssps0",
                                "created": 1585127779266,
                                "text": "放大画布:Ctrl +“+”",
                                "font-size": 18,
                                "color": "#ccc0d9",
                                "layout_right_offset": {
                                    "x": 68,
                                    "y": -38
                                },
                                "layout_left_offset": {
                                    "x": -36,
                                    "y": -47
                                }
                            },
                            "children": [

                            ]
                        },
                        {
                            "data": {
                                "id": "c1jswhh0nmo0",
                                "created": 1585127780488,
                                "text": "缩小画布:Ctrl +“-”",
                                "font-size": 18,
                                "color": "#ccc0d9",
                                "layout_right_offset": {
                                    "x": 68,
                                    "y": -22
                                },
                                "layout_left_offset": {
                                    "x": -39,
                                    "y": -28
                                }
                            },
                            "children": [

                            ]
                        },
                        {
                            "data": {
                                "id": "c1jswivop5k0",
                                "created": 1585127783552,
                                "text": "拖动画布:按住鼠标右键",
                                "font-size": 18,
                                "color": "#ccc0d9",
                                "layout_right_offset": {
                                    "x": 69,
                                    "y": 2
                                },
                                "layout_left_offset": {
                                    "x": -39,
                                    "y": -3
                                }
                            },
                            "children": [

                            ]
                        },
                        {
                            "data": {
                                "id": "c1jswjvpi9k0",
                                "created": 1585127785730,
                                "text": "定位节点中心:双击鼠标左键",
                                "font-size": 18,
                                "color": "#ccc0d9",
                                "layout_right_offset": {
                                    "x": 71,
                                    "y": 14
                                },
                                "layout_left_offset": {
                                    "x": -41,
                                    "y": 10
                                }
                            },
                            "children": [

                            ]
                        }
                    ]
                },
                {
                    "data": {
                        "id": "c1jsleo62hk0",
                        "created": 1585126912385,
                        "text": "导出格式",
                        "layout_mind_offset": {
                            "x": -46,
                            "y": 108
                        },
                        "expandState": "expand",
                        "font-size": 22,
                        "background": "#c2d69b",
                        "color": "#262626",
                        "font-weight": "bold",
                        "layout_right_offset": {
                            "x": 5,
                            "y": 153
                        }
                    },
                    "children": [
                        {
                            "data": {
                                "id": "c1knktgogog0",
                                "created": 1585214320627,
                                "text": "图片",
                                "font-size": 18,
                                "color": "#000000",
                                "expandState": "expand",
                                "layout_right_offset": {
                                    "x": 58,
                                    "y": -20
                                },
                                "background": "#c2d69b",
                                "layout_left_offset": {
                                    "x": -48,
                                    "y": -28
                                }
                            },
                            "children": [
                                {
                                    "data": {
                                        "id": "c1jsqis0d540",
                                        "created": 1585127313145,
                                        "text": "JPG、PNG、SVG",
                                        "background": "transparent",
                                        "font-size": 18,
                                        "color": "#c2d69b",
                                        "layout_right_offset": {
                                            "x": 1,
                                            "y": 1
                                        }
                                    },
                                    "children": [

                                    ]
                                }
                            ]
                        },
                        {
                            "data": {
                                "id": "c1knl8lj2m00",
                                "created": 1585214353572,
                                "text": "文件",
                                "font-size": 18,
                                "color": "#000000",
                                "expandState": "expand",
                                "layout_right_offset": {
                                    "x": 61,
                                    "y": 0
                                },
                                "background": "#c2d69b",
                                "layout_left_offset": {
                                    "x": -47,
                                    "y": 2
                                }
                            },
                            "children": [
                                {
                                    "data": {
                                        "id": "c1jsqis0d540",
                                        "created": 1585127313145,
                                        "text": "PDF、json、TXT、markdown",
                                        "background": "transparent",
                                        "font-size": 18,
                                        "color": "#c2d69b",
                                        "layout_right_offset": {
                                            "x": 0,
                                            "y": 1
                                        }
                                    },
                                    "children": [

                                    ]
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        "subtree": [

        ],
        "template": "default",
        "theme": "classic-compact",
        "relLine": [

        ],
        "style": {

        },
        "themeBgColor": "",
        "background": "",
        "version": "1.5.2",
        "ppts": [

        ]
    }
    path = '/home/python/Desktop/proejct_xx/_media/temp_file/test.xmind'
    gen_xmind_file(data,  path=path)

到此这篇关于python xmind 包使用 (其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题)的文章就介绍到这了,更多相关python xmind 包使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python流程图和思维导图实例代码

    目录 1 流程图 2 思维导图 1)飞翔的小龟龟 2)一个好看的登陆界面 3)打飞机 总结 1 流程图   流程图是一种用于表示算法或代码流程的框图组合,它以不同类型的框框代表不同种类的程序步骤,每两个步骤之间以箭头连接起来.   使用流程图,至少有以下几点好处:   (1)是代码编写的指导文档   (2)有助于规划高效的程序结构   (3)便于与他人交流你的程序代码   流程图使用不同的符号(框)来表示代码的特定部分:   接下来看一些例子: name = input("你的名字:"

  • 使用Python 操作 xmind 绘制思维导图的详细方法

    思维导图 思维导图:思维导图又叫心智导图是表达发散性思维的有效的图形思维工具,它简单却又很有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像.颜色等建立记忆链接.思维导图充分运用左右脑的机能,利用记忆.阅读.思维的规律,协助人们在科学与艺术.逻辑与想象之间平衡发展,从而开启人类大脑的无限潜能.思维导图因此具有人类思维的强大功能. 思维导图是一种将思维形象化的方法.简单来讲:思维导图就是能有层次感的展示我们想法的思维工具.

  • 使用python把xmind转换成excel测试用例的实现代码

    前言 因为写好了测试xmind脑图后,然后再编写测试用例,实在是太麻烦了,所以我写了一点测试用例后,就网上百度了下,怎么直接把xmind脑图转换成excel测试用例,纯个人学习笔记 本文参考: https://www.cnblogs.com/xu-xu/articles/11999960.html https://www.cnblogs.com/xu-xu/articles/12000205.html 提示:以下是本篇文章正文内容,下面可供参考 一.确定好自己的xmind的用例格式 因为xmin

  • 一文总结学习Python的14张思维导图

    本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库,后续会发布相应专题的文章). 首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典,集合),条件&循环,文件对象,错误&异常,函数,模块,面向对象编程: 接着,结合这些思维导图主要参考的资料,分享一下我的学习体验,一方面可供初学者参考,另一方面,也便于大家结合思维导图深入学习.理解.思考: 最后,提供几篇文章链接,方便希望从 Python 2.x 迁移到 3.x 的朋友理解

  • 使用Python将xmind脑图转成excel用例的实现代码(一)

    最近接到一个领导需求,将xmind脑图直接转成可以导入的excel用例,并且转换成gui可执行的exe文件,方便他人使用. 因为对Python比较熟悉,所以就想使用Python3来实现这个功能,先理一下思路,首先要将xmind转换成Python可用的数据格式,正好找到了一个xmindparser库可以做这个事情,然后就好办了,用xlwt库写成xls文件,再用Python自带的gui库 tkinter来写 gui界面,最后用pyinstaller来打包. 计划分两个py文件来写,一个文件写exce

  • Python学习思维导图(必看篇)

    无意间碰到的一个大神整理的Python学习思维导图,感觉对初学者理清学习思路大有裨益,非常感谢他的分享. 14 张思维导图 基础知识 数据类型 序列 字符串 列表 & 元组 字典 & 集合 条件 & 循环 文件对象 错误 & 异常 函数 模块 面向对象编程 以上这篇Python学习思维导图(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python xmind 包使用详解(其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题)

    pip install xmind 使用 場景 xmind8 可以打开 xmind2020 报错 main_fest.xml(xmind8 打开另存后 更改后缀为.zip 里边包含META-INF/manifest.xml) ** 将xmind文件修改后缀为zip ---->解压---->放入main_fest.xml ->压缩为zip ->修改后缀为xmind** import xmind import os import re import shutil import zipf

  • Python入门之模块和包用法详解

    目录 模块 1. 导入模块的方式 2. 导入方式详解 3. 制作模块 4. 模块定位顺序 5. __all__ 包 1. 制作包 2. 导入包 总结 模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和 Python 语句 模块能定义函数,类和变量,模块里也能包含可执行的代码 1. 导入模块的方式 import 模块名 from 模块名 import 功能名 from 模块名 import * import 模块名 as 别名

  • Python中str is not callable问题详解及解决办法

    Python中str is not callable问题详解及解决办法 问题提出: 在Python的代码,在运行过程中,碰到了一个错误信息: python代码: def check_province_code(province, country): num = len(province) while num <3: province = ''.join([str(0),province]) num = num +1 return country + province 运行的错误信息: check

  • 对python中的装包与解包实例详解

    *args和 **kwargs是常用的两个参数 *args:用于接受多余的未命名的参数,元组类型. **kwargs:用于接受形参的命名参数,字典类型的数据. 可变参数args: def fun(n, *args): print(n) print(args) # 未拆包 print(*args) # 进行拆包 fun(1,2,3,4) 结果: 1 (2, 3, 4) 2 3 4 形参中的*args是接受数据的args,它是一个元组,把传入的数据放进args元组中. 函数中的args仍然是元组,

  • 详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案

    先看一道GIL面试题: 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. GIL:又叫全局解释器锁,每个线程在执行的过程中都需要先获取GIL,保证同一时刻只有一个线程在运行,目的是解决多线程同时竞争程序中的全局变量而出现的线程安全问题.它并不是python语言的特性,仅仅是由于历史的原因在CPython解释器中难以移除,因为python语言运行环境大部分默认在CPython解释器中. 通过

  • python中time包实例详解

    在python中基础的时间运用,离不开time函数的支持.这些函数为了方便调用集中放在一个地方,叫做time包.有的人会仔细追寻time包的来源,会发现它和C语言有密不可分的关系.下面我们简单介绍time包的概念,然后就包中的一些函数进行列举,并附上对应的使用方法. 1.概念 time包基于C语言的库函数(library functions).Python的解释器通常是用C编写的,Python的一些函数也会直接调用C语言的库函数. 2.time包中的函数 time.clock()返回程序运行的整

  • python解包用法详解

    对于一堆资料,我们可以把它分给不同的人使用,这个分散的过程,我们可以看成是解包方法是实现.当然实际python解包的使用会相对复杂一点,我们会对常见的列表.函数等进行操作.下面我们就Python解包的使用进行说明,然后带来两种解包方法的详解,大家一起往下看. 1.使用说明 (1)解包的意义就是将传递给函数的一个列表,元组,字典,拆分成独立的多个元素然后赋值给函数中的形参变量. (2)解包字典有两种解法,一种用*解的只有key,一种用**解的有key.value.但是这个方法**只能在函数定义中使

  • python元组打包和解包过程详解

    1.在将多个以逗号分隔的值赋给一个变量时,多个值被打包成一个元组类型.当我们将一个元组赋给多个变量时,它将解包成多个值,然后分别将其赋给相应的变量. # 打包 a = 1, 10, 100 print(type(a), a) # <class 'tuple'> (1, 10, 100) # 解包 i, j, k = a print(i, j, k) # 1 10 100 2.解包时,如果解包出来的元素数目与变量数目不匹配,就会引发ValueError异常.错误信息为:too many valu

  • Python稀疏矩阵scipy.sparse包使用详解

    目录 1. 前言 2. 导入包 3. 稀疏矩阵总览 4. 稀疏矩阵详细介绍 4.1 coo_matrix 4.2 dok_matrix 4.3 lil_matrix 4.4 dia_matrix 4.5 csc_matrix & csr_matrix 4.6 bsr_matrix 5. 稀疏矩阵的存取 5.1 用save_npz保存单个稀疏矩阵 6. 总结 7. 参考 1. 前言 数组和矩阵是数值计算的基础元素.目前为止,我们都是使用NumPy的ndarray数据结构来表示数组,这是一种同构的容

  • pypy提升python项目性能使用详解

    目录 一.PyPy介绍 二.PyPy安装 三.PyPy和Python测试对比 四.PyPy注意事项 一.PyPy介绍 PyPy是用Python实现的Python解释器的动态编译器,是Armin Rigo开发的产品,能够提升我们python项目的运行速度.PyPy 是利用即时编译的 Python 的替代实现. 背后的原理是 PyPy 开始时就像一个解释器,直接从源文件运行我们的 Python 代码.但是,PyPy 不是逐行运行代码,而是在执行它们之前将部分代码编译为机器代码. 根据官方文档的介绍可

随机推荐