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