python xmind包使用詳解
pip install xmind 使用
場景 xmind8 可以打開 xmind2020 報(bào)錯(cuò)
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 報(bào)錯(cuò) 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) # 修復(fù) 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": "節(jié)點(diǎn)操作","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": "插入節(jié)點(diǎn)", "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": "下級(jí):快捷鍵【Tab】 ", "font-size": 18, "color": "#ffc000", "layout_right_offset": { "x": 27, "y": -12 }, "background": "transparent" }, "children": [ ] }, { "data": { "id": "c1jso0dk2cg0", "created": 1585127116361, "text": "同級(jí):快捷鍵【Enter】 ", "font-size": 18, "color": "#ffc000", "layout_right_offset": { "x": 27, "y": 0 }, "background": "transparent" }, "children": [ ] }, { "data": { "id": "c1jsp3q5g4g0", "created": 1585127202017, "text": "上級(jí):快捷鍵【Shift + Tab】", "font-size": 18, "color": "#ffc000", "layout_right_offset": { "x": 30, "y": 13 }, "background": "transparent" }, "children": [ ] } ]},{ "data": { "id": "c1jslivsluw0", "created": 1585126921553, "text": "移動(dòng)節(jié)點(diǎn)", "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": "拖動(dòng)畫布:按住鼠標(biāo)右鍵", "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": "定位節(jié)點(diǎn)中心:雙擊鼠標(biāo)左鍵", "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": "導(dǎo)出格式","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)
到此這篇關(guān)于python xmind 包使用 (其中解決導(dǎo)出的xmind文件 xmind8可以打開 xmind2020及之后版本打開報(bào)錯(cuò)問題)的文章就介紹到這了,更多相關(guān)python xmind 包使用內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。