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

您所在的位置:网站首页 xmind可以用什么打开 python xmind 包使用 (其中解决导出的xmind文件 xmind8可以打开 xmind2020及之后版本打开报错问题)

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

2023-06-27 05:53| 来源: 网络整理| 查看: 265

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 TopicElementdef extract(d_path, f_path, mode="zip"):"""zip解压缩乱码问题处理:param d_path::param f_path::return:"""root = d_pathif 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.filenametry:decodeName = srcName.encode("cp437").decode("utf-8")except:try:decodeName = srcName.encode("cp437").decode("gbk")except:decodeName = srcNamespiltArr = decodeName.split("/")path = rootfor 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 foundworkbook = xmind.load(path)# get the first sheet(a new workbook has a blank sheet by default)sheet1 = workbook.getPrimarySheet()# design_sheet1(sheet1)# create sheet2gen_sheet2(workbook, sheet1, data)# now we save as test.xmindxmind.save(workbook, path=path)# 修复aftertreatment(path)def recursive(children, node, workbook):if len(children) == 0:returnfor 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 defaultroot_topic2 = sheet2.getRootTopic()root_topic2.setTitle(center)topics = data["root"]["children"]for t in topics:# use other methods to create some sub topic elementtopic = 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)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3