xmind python代码save后用xmind2020报错无法打开:原因xmind8格式无法用xmind2020打开,META-INF文件夹缺失

今天打算把本地文件夹下的文件名全部输入到xmind2024版的思维导图里,作为子标题,自动实时更新,免得我自己还要加。
在用chatgpt写python代码后报错:
1、 xmind.Workbook不能开新画布,直接用xmind.load就行
2、xmind.save(wb, path)保存下来的文件用最新版xmind无法打开,是因为自动保存为xmind8格式,缺少一个META-INF文件夹和里面的manifest.xml文件

解决办法参照两位博主【链接1】【链接2】

手动方法我半天才看懂,已知:

  • 根据chatgpt代码已经保存了一个a.xmind(缺文件版xmind8版打不开)
  • 直接右键,重命名,变成a.zip
  • 在a.zip里复制整个META-INF文件夹(这个文件夹在xmind8保存下的name.xmind文件转为name.zip里会出现)。或新建文件夹命名META-INF,添加文件manifest.xml
  • manifest.xml里的内容如下(这样你们就不用再下xmind8去找META-INF文件夹了):
  • <manifest xmlns="urn:xmind:xmap:xmlns:manifest:1.0" password-hint=""> <file-entry full-path="content.xml" media-type="text/xml"/> <file-entry full-path="META-INF/" media-type=""/> <file-entry full-path="META-INF/manifest.xml" media-type="text/xml"/> <file-entry full-path="meta.xml" media-type="text/xml"/> <file-entry full-path="styles.xml" media-type="text/xml"/> <file-entry full-path="Thumbnails/" media-type=""/> <file-entry full-path="Thumbnails/thumbnail.png" media-type=""/> </manifest>
  • 最后,把刚才改成a.zip的,再重命名,改为a.xmind
  • 顺利打开,结束

刚才试了一下,发现子主题和照片还有额外的文件夹和json文件也是同理,缺什么补什么,但是我硬补照片那个Thumbnails和resources文件夹不行,里面应该是对照片的命名有编码规则,我暂时不懂,有人知道可以帮忙调整下,所以不能直接复制,也有可能是我代码写错了,可以自己试下。

我个人总结整体代码如下,根据自己的需求调整xmind内容即可(需要在环境内pip install xmind):


```python
import os
import time
import xmind
import zipfile
from xmind.core.saver import WorkbookSaver

# 指定文件夹路径和 XMind 文件路径
folder_path = r'C:/academic/post/pdf/疏果'  # 你的PDF文件夹路径
xmind_file_path = r'C:/academic/post/a.xmind'  # 你的XMind文件路径
zip_file_path = r'C:/academic/post/a.zip'  # 临时的ZIP文件路径
folder_to_add = r'C:/Users/dians/Desktop/changing/META-INF'  # 你想添加到zip文件的文件夹路径
json_file_path = r'C:/Users/dians/Desktop/changing/manifest.json'  # 你想添加的JSON文件的路径

# 创建或加载XMind文件
wb = xmind.load(xmind_file_path)

# 获取或创建主Sheet和根主题
sheet = wb.getPrimarySheet()
root_topic = sheet.getRootTopic()
root_topic.setTitle("论文文献")

def update_xmind():
    # 获取已有的子主题列表
    existing_topics = [topic.getTitle() for topic in root_topic.getSubTopics()]

    for file_name in os.listdir(folder_path):
        if file_name.endswith('.pdf') and file_name not in existing_topics:
            new_topic = root_topic.addSubTopic()
            new_topic.setTitle(file_name)

    # 保存 XMind 文件
    xmind.save(wb, xmind_file_path)
    print(f"XMind 文件已保存到 {xmind_file_path}")

    # 确保文件保存成功后进行后续操作
    if os.path.exists(xmind_file_path):
        try:
            # Step 1: 将 .xmind 文件重命名为 .zip
            os.rename(xmind_file_path, zip_file_path)
            print(f"已将 {xmind_file_path} 重命名为 {zip_file_path}")

            # Step 2: 将文件夹和JSON文件添加到 .zip 文件中
            with zipfile.ZipFile(zip_file_path, 'a', zipfile.ZIP_DEFLATED) as zipf:
                # 添加文件夹内容
                for root, dirs, files in os.walk(folder_to_add):
                    for file in files:
                        file_path = os.path.join(root, file)
                        arcname = os.path.relpath(file_path, start=os.path.dirname(folder_to_add))
                        zipf.write(file_path, arcname)
                print(f"已将文件夹 {folder_to_add} 添加到 {zip_file_path}")

                # 添加 JSON 文件
                if os.path.exists(json_file_path):
                    zipf.write(json_file_path, 'manifest.json')
                    print(f"已将JSON文件 {json_file_path} 添加到 {zip_file_path}")
                else:
                    print(f"未找到JSON文件 {json_file_path}")

            # Step 3: 将 .zip 文件重命名回 .xmind
            os.rename(zip_file_path, xmind_file_path)
            print(f"已将 {zip_file_path} 重命名为 {xmind_file_path}")

        except Exception as e:
            print(f"处理文件时出错: {e}")

# 实时监控文件夹更新
try:
    while True:
        update_xmind()
        time.sleep(10)  # 每10秒检查一次文件夹的变化
except KeyboardInterrupt:
    print("监控已停止。")



  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值