几行代码实现OneNote转换Markdown格式(以导入其他笔记软件)
Markdown笔记软件大势所趋,OneNote由于对中文支持很差在AI并入office前功败垂成,因此,OneNote转换Markdown格式,更换知识管理软件非常重要。另外,Markdown格式是这一时代的“AI语言”,只有将文件保存为markdown格式,AI才能更好地理解,因此,构建以Markdown为主的知识库非常重要。
OneNote作为上一闭源笔记软件时代的主流软件,如何做好旧知识库与新知识库衔接,这项工作对用户融入AI时代,非常具有意义。
方法1
具体思路:OneNote导出word
利用python的 os、time、mammoth、markdownify库,word转换为markdown文件
import time
import os
import mammoth
from markdownify import markdownify
# Word 文档内的图片存储
def convert_img(image):
with image.open() as image_bytes:
file_suffix = image.content_type.split("/")[1]
path_file = "./Others/{}.{}".format(str(time.time()),file_suffix)
with open(path_file, 'wb') as f:
f.write(image_bytes.read())
return {"src":path_file}
def word2markdown(docxPath:str):
docxTitile = docxPath.split('\\')[-1].split('.')[0]
with open(docxPath ,"rb") as docx_file:
# 转化 Word 文档为 HTML
result = mammoth.convert_to_html(docx_file,convert_image=mammoth.images.img_element(convert_img))
# result = mammoth.convert_to_html(docx_file)
# 获取 HTML 内容
html = result.value
# 转化 HTML 为 Markdown
md = markdownify(html,heading_style="ATX")
# print(md)
with open("./"+docxTitile+".md","w",encoding='utf-8') as md_file:
md_file.write(md)
messages = result.messages
print("转换完成.{}",docxPath)
# 读取 Word 文件
base_URL = "E:\\Word"
if os.path.exists(base_URL):
list = os.listdir(base_URL)
docxList = []
for i in range(len(list)):
if list[i].endswith('.docx'):
docxList.append(list[i])
for i in range(len(docxList)):
word2markdown(os.path.join(base_URL,docxList[i]))
方法2
可以使用 win32com 模块来实现批量将 OneNote 笔记本转换为 markdown 文件的功能。需要注意的是,由于 OneNote 的 COM API 只能在 Windows 系统上使用,因此以下代码只能在 Windows 环境下运行。
首先,需要安装 pywin32 库:
pip install pywin32
使用以下代码进行 OneNote 转换为 markdown:
import os
import win32com.client
# OneNote 笔记本所在路径
path = "D:\\数据库\\数据库-OneNote\\OneNote 笔记本"
# markdown 文件存储路径
markdown_path = "D:\\markdown"
# 创建 OneNote 应用程序对象
onenote = win32com.client.Dispatch("OneNote.Application")
# 获取所有打开的 OneNote 笔记本
notebooks = onenote.GetHierarchy("", win32com.client.constants.hsNotebooks)
# 遍历所有笔记本
for notebook in notebooks:
# 获取笔记本名称和 ID
notebook_name = notebook.Name
notebook_id = notebook.ID
# 构造 Notebook XML ID
notebook_xml_id = "file://" + os.path.join(path, notebook_id + ".one")
# 获取笔记本下所有节(section)
sections = onenote.GetHierarchy(notebook_xml_id, win32com.client.constants.hsSections)
# 遍历所有节
for section in sections:
# 获取节名称和 ID
section_name = section.Name
section_id = section.ID
# 构造 Section XML ID
section_xml_id = "file://" + os.path.join(path, notebook_id + "_", section_id + ".one")
# 获取节下所有页(page)
pages = onenote.GetHierarchy(section_xml_id, win32com.client.constants.hsPages)
# 遍历所有页
for page in pages:
# 获取页名称和 ID
page_name = page.Name
page_id = page.ID
# 构造 Page XML ID
page_xml_id = "file://" + os.path.join(path, notebook_id + "_", section_id + "_", page_id + ".one")
# 导出为 markdown 文件
output_file = os.path.join(markdown_path, notebook_name, section_name, page_name + ".md")
if not os.path.exists(os.path.dirname(output_file)):
os.makedirs(os.path.dirname(output_file))
onenote.Publish(page_xml_id, output_file, "Markdown")
在这个代码中,首先创建了一个 OneNote 应用程序对象,然后使用该对象获取了 OneNote 笔记本的层次结构,并遍历所有的笔记本、节和页。接着,使用 onenote.Publish 方法将 OneNote 页面导出为 markdown 文件,并保存到指定路径下。
科研工具、办公技巧、工具网站、数据收集,所有学生阶段需要的一切,应有尽有,甚至还有游戏喜加一。当然,也会有个人生活的文艺记录。感谢关注科研热点。
如果你喜欢这篇文章,多谢关注、点赞和评论,你的支持是我最大的动力。