Python 使用Python操作xmind文件
使用Python操作xmind文件
by:授客 QQ:1033553122
测试环境
Win10
Python 3.5.4
XMind-1.2.0.tar.gz
下载地址:
创建及更新xmind文件
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import xmind
from xmind.core.const import TOPIC_DETACHED
from xmind.core.markerref import MarkerId
from xmind.core.topic import TopicElement
# 加载已有xmind文件,如果不存在,则新建
workbook = xmind.load('D:\\example\\example.xmind')
first_sheet = workbook.getPrimarySheet() # 获取第一个画布
first_sheet.setTitle('First Sheet') # 设置画布名称
root_topic1 = first_sheet.getRootTopic() # 获取画布中心主题,默认创建画布时会新建一个空白中心主题
root_topic1.setTitle('Example Topic') # 设置主题名称
sub_topic1 = root_topic1.addSubTopic() # 创建子主题,并设置名称
sub_topic1.setTitle("first sub topic")
sub_topic2 = root_topic1.addSubTopic()
sub_topic2.setTitle("second sub topic")
sub_topic3 = root_topic1.addSubTopic()
sub_topic3.setTitle("third sub topic")
# 除了新建子主题,还可以创建自由主题(注意:只有中心主题支持创建自由主题)
detached_topic1 = root_topic1.addSubTopic(topics_type=TOPIC_DETACHED)
detached_topic1.setTitle("detached topic")
detached_topic1.setPosition(0, 30)
# 创建一个子主题的子主题
sub_topic1_1 = sub_topic1.addSubTopic()
sub_topic1_1.setTitle("I'm a sub topic too")
second_sheet = workbook.createSheet() # 创建新画布
second_sheet.setTitle('Second Sheet')
root_topic2 = second_sheet.getRootTopic()
root_topic2.setTitle('Root Node')
# 使用其它方式创建子主题元素
topic1 = TopicElement(ownerWorkbook=workbook)
topic1.setTopicHyperlink(first_sheet.getID()) # 为画布创建一个来自第一个画布的主题链接
topic1.setTitle("redirection to the first sheet")
topic2 = TopicElement(ownerWorkbook=workbook)
topic2.setTitle("topic with an url hyperlink")
topic2.setURLHyperlink("https://www.cnblogs.com/shouke") # 为子主题元素设置URL超链接
topic3 = TopicElement(ownerWorkbook=workbook)
topic3.setTitle("third node")
topic3.setPlainNotes("notes for this topic") # 为子主题设置备注 (F4 in XMind)
topic3.setTitle("topic with \n notes")
topic4 = TopicElement(ownerWorkbook=workbook)
topic4.setFileHyperlink("d:\\example\demo.jpg") # 为子主题元素设置文件超链接
topic4.setTitle("topic with a file")
topic1_1 = TopicElement(ownerWorkbook=workbook)
topic1_1.setTitle("sub topic")
topic1_1.addLabel("a label") # 为子主题添加标签(official XMind only can a one label )
# 添加子主题到非中心主题
topic1.addSubTopic(topic1_1)
topic1_1_1 = TopicElement(ownerWorkbook=workbook)
topic1_1_1.setTitle("topic can add multiple markers")
# 为主题添加标记
topic1_1_1.addMarker(MarkerId.starBlue)
topic1_1_1.addMarker(MarkerId.flagGreen)
# 为子主题添加子主题
topic1_1.addSubTopic(topic1_1_1)
topic2_1 = TopicElement(ownerWorkbook=workbook)
topic2_1.setTitle("topic can add multiple comments")
# 为主题添加评论
topic2_1.addComment("I'm a comment!")
topic2_1.addComment(content="Hello comment!", author='devin')
topic2.addSubTopic(topic2_1)
# 添加子主题元素到中心主题
root_topic2.addSubTopic(topic1)
root_topic2.addSubTopic(topic2)
root_topic2.addSubTopic(topic3)
root_topic2.addSubTopic(topic4)
# 遍历子主题
topics = root_topic2.getSubTopics()
for index, topic in enumerate(topics):
topic.addMarker("priority-" + str(index + 1)) # 为主题添加标记(优先级图标)
# 为子主题1和子主题2创建关系
second_sheet.createRelationship(topic1.getID(), topic2.getID(), "relationship test")
# xmind.save(workbook) # 保存并覆盖原始文件
# 仅保存content.xml
# xmind.save(workbook=workbook, path="d:\\example\\other.xmind", only_content=True) # 不改动原始文件,另存为其它xmind文件
# 仅保存content.xml、comments.xml、styles.xml
# xmind.save(workbook=workbook, path="d:\\example\\other.xmind", except_revisions=True) # 不改动原始文件,另存为其它xmind文件
# 保存所有东西,Revisions除外,以节省空间(推荐)
# xmind.save(workbook=workbook, path="d:\\example\\other.xmind", except_revisions=True) # 不改动原始文件,另存为其它xmind文件
# 保存所有内容,并且另存为其它xmind文件(推荐)
xmind.save(workbook=workbook, path='d:\\example\\other.xmind') # 不改动原始文件,另存为其它xmind文件,等同 xmind.save(workbook, 'd:\\example\\exam.xmind')
运行结果


解析xmind文件
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json
import xmind
import pipes
def dict_to_prettify_json(data):
print(json.dumps(data, indent=4, separators=(',', ': ')))
def custom_parse_xmind(workbook):
elements = {}
def _echo(tag, element, indent=0):
title = element.getTitle()
elements[element.getID()] = title
print('\t' * indent, tag, ':', pipes.quote(title))
def dump_sheet(sheet):
root_topic = sheet.getRootTopic()
_echo('RootTopic', root_topic, 1)
for topic in root_topic.getSubTopics() or []:
_echo('AttachedSubTopic', topic, 2)
for topic in root_topic.getSubTopics(xmind.core.const.TOPIC_DETACHED) or []:
_echo('DetachedSubtopic', topic, 2)
for rel in sheet.getRelationships():
id1, id2 = rel.getEnd1ID(), rel.getEnd2ID()
print('Relationship: [%s] --> [%s]' % (elements.get(id1), elements.get(id2)))
# 遍历画布
for sheet in workbook.getSheets():
_echo('Sheet', sheet)
dump_sheet(sheet)
# 加载已有xmind文件,如果不存在,则新建
workbook = xmind.load('D:\\example\\example.xmind')
print(workbook.getData()) # 获取整个xmind数据(字典的形式)
dict_to_prettify_json(workbook.getData())
# 获取某个画布的数据(字典的形式)
first_sheet = workbook.getPrimarySheet()
dict_to_prettify_json(first_sheet.getData())
# 获取某个主题数据(字典的形式)
root_topic = first_sheet.getRootTopic()
dict_to_prettify_json(root_topic.getData())
# 获取评论数据
commentsbook = workbook.commentsbook
print(commentsbook.getData())
# 自定义解析
custom_parse_xmind(workbook)
Python 使用Python操作xmind文件的更多相关文章
- Python—集合的操作、文件的操作
1.集合的操作 2.文件的操作 1.集合的操作 定义: 1.不同元素组成,自动去重 2.无序 3.集合中的元素必须是不可变类型 1.集合的定义: >>> s1 = set('abcd ...
- python基础-PyYaml操作yaml文件
yaml语法 格式 它的基本语法规则如下 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 YAML 支持的数据结构有 ...
- python使用xlrd操作Excel文件
一.xlrd读取Excel文件 用xlrd进行读取比较方便,流程和平常手动操作Excel一样,打开工作簿(Workbook),选择工作表(sheets),然后操作单元格(cell). 例子:要打开当前 ...
- Python之Pandas操作csv文件dataframe
# -*- coding: utf-8 -*- # author:baoshan import pandas as pd def main(): aqi_data = pd.read_csv('chi ...
- (Python )格式化输出、文件操作、json
本节学习Python的格式化输出,文件操作以及json的简单用法 1.格式化输出 将非字符串类型转换成字符串,可以使用函数:str() 或者repr() ,(这两个函数的区别目前我还没搞懂,求解答) ...
- 使用 Python 进行稳定可靠的文件操作
程序需要更新文件.虽然大部分程序员知道在执行I/O的时候会发生不可预期的事情,但是我经常看到一些异常幼稚的代码.在本文中,我想要分享一些如何在Python代码中改善I/O可靠性的见解. 考虑下述Pyt ...
- Python操作Zip文件
Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt. import zipfile # ...
- Python系列-python文件操作
原链接:https://blog.csdn.net/m0_37745438/article/details/79573414 python提供了一系列方法来对文件进行读取.写入等操作 一.打开文件的方 ...
- python的学习笔记01_5文件操作
一,文件操作基本流程. 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众 ...
- python 操作Excel文件
1 安装xlrd.xlwt.xlutils cmd下输入: pip install xlrd #读取excel pip install xlwt #写入excel pi ...
随机推荐
- Gitea 代码仓库平台
引言 Gitea 是一个自己托管的 Git 服务程序.他和 GitHub,Bitbucket or Gitlab 等比较类似.它是从 Gogs 发展而来,不过它已经 Fork 并且命名为 Gitea. ...
- 在 Flask 项目中配置 Session:简明指南
在 Flask 项目中配置 Session:简明指南 本文介绍如何在 Flask 项目中配置会话 1. Flask 内置会话 Flask 自带会话管理功能,使用客户端 Cookie 存储会话数据.默认 ...
- 01-布局扩展-用calc来计算实现双飞翼布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 剑指Offer-67.剪绳子(C++/Java)
题目: 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m ...
- 使用 Filebeat+Easysearch+Console 打造日志管理平台
近年来,日志管理平台越来越流行.使用日志管理平台可以实时地.统一地.方便地管理和查看日志,挖掘日志数据价值,驱动运维.运营,提升服务管理效率. 方案架构 Beats 是轻量级采集器,包括 Filebe ...
- golang 泛型的格式写法
Go语言中的泛型(Generics)是在 Go 1.18 版本中引入的一个重要特性,它允许你编写可重用的代码,而不需要为每种数据类型重复编写相同的逻辑. 泛型通过参数化类型(type paramete ...
- 在.NET Core,除了VB的LikeString,还有其它方法吗?(四种LikeString实现分享)
Like运算符很好用,特别是它所提供的其中*.?这两种通配符,在Windows文件系统和各类项目中运用非常广泛. 但Like运算符仅在VB中支持,在C#中,如何实现呢? 以下是关于LikeString ...
- 安装nodejs易遇到的坑
@ 目录 背景描述 流程步骤 小结 背景描述 我的服务器是centos7.9,打算先直接通过yum安装,但是yum不能指定node版本,我直接指定显示404找不到,然后我设置了下node下载的源,还是 ...
- 记一次cdh6.3.2版本spark写入phoniex的错误:Incompatible jars detected between client and server. Ensure that phoenix-[version]-server.jar is put on the classpath of HBase in every region server:
Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl. ...
- Flash驱动控制--芯片擦除(SPI协议)
摘要: 本篇博客具体包括SPI协议的基本原理.模式选择以及时序逻辑要求,采用FPGA(EPCE4),通过SPI通信协议,对flash(W25Q16BV)存储的固化程序进行芯片擦除操作. 关键词:SPI ...