新闻动态

python xmind包使用详解

发布日期:2021-12-24 01:35 | 文章来源:脚本之家

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 包使用内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部