Python实现Word文档转换Markdown的示例

作者:州的先生 时间:2022-06-24 08:23:29 

随着SaaS服务的流行,越来越多的人选择在各个平台上编写文档,制作表格并进行分享。

同时,随着Markdown语法的破圈,很多平台开始集成支持这种简洁的书写标记语言,这样可以保证平台上用户文档样式的统一性。

但是在一些场景下,我们还是会在本地的Office软件上写有很多文档,或者历史遗留了很多本地文档。

如果我们需要将其上传到各大平台,直接复制粘贴,大概率是会造成文档内容结构和样式的丢失。于此我们需要将其转换为 Markdown 语法。

很多桌面软件(比如Typora)都提供了导入 Word 文件的功能,这类功能一般是通过 Pandoc 这个软件来扩展实现的。

Pandoc 是一个全能型的文档格式转换工具,其能够将多种文档格式转换为各类常见的文档格式。具体的文档格式之间的转换如下图所示(来源于官网):

Python实现Word文档转换Markdown的示例

Pandoc 是瑞士军刀一般的存在,能够较好的处理各类的文档格式转换,但是如果我们需要自己写程序,调用 Pandoc 则需要额外的安装 Pandoc 才行,并且也不方便自定义。

幸而,在 Python 中有很多第三方模块提供了此类文档格式的转换功能。今天,我们来实现一下比较频繁使用到的 Word 文档转 Markdown 文档。

转换逻辑

Word 文档到 Markdown 文档的转换总体而言分两步来实现:

  • 第一步,将 Word 文档转换为 HTML 文档;

  • 第二步,将 HTML 文档转换为 Markdown 文档;

依赖模块

要实现这个功能我们需要借助 Python 的两个第三方模块:

  • mammoth

  • markdownify

mammoth 是一个用于将 Word 文档转换为 HTML 的模块,它支持在 Python、JavaScript、Java、.Net等平台使用。而 markdownify 则是将 HTML 转换为 Markdown 文档的模块。

处理 Word 图片

因为 Word 文档中不可避免地会存在很多图片,为了在转换后的文档中能够正确地显示图片,我们需要自定义一下Word 文档内图片的处理方式。默认情况下,mammoth 会将图片转换为 base64 编码的字符串,这样不用生成额外的本地图片文件,但是会使文档体积变得很大。所以我们选择将图片另存为本地图片:


# 转存Word文档内的图片
def convert_img(image):
 with image.open() as image_bytes:
   file_suffix = image.content_type.split("/")[1]
   path_file = "./img/{}.{}".format(str(time.time()),file_suffix)
   with open(path_file, 'wb') as f:
     f.write(image_bytes.read())

return {"src":path_file}

正式转换

在这里,我们以州的先生很久以前写的《Python爬虫实战与机器学习应用》(需要这本书的小伙伴可以微信私聊我)这本书的 Word 文档来演示。

Python实现Word文档转换Markdown的示例

代码如下所示:


# 读取Word文件
with open(r"F:\自媒体\Python爬虫实战与机器学习应用.docx" ,"rb") as docx_file:
 # 转化Word文档为HTML
 result = mammoth.convert_to_html(docx_file,convert_image=mammoth.images.img_element(convert_img))
 # 获取HTML内容
 html = result.value
 # 转化HTML为Markdown
 md = markdownify(html,heading_style="ATX")
 print(md)
 with open("./docx_to_html.html",'w',encoding='utf-8') as html_file,open("./docx_to_md.md","w",encoding='utf-8') as md_file:
   html_file.write(html)
   md_file.write(md)
 messages = result.messages

运行程序,最终生成2个文件:

  • docx_to_html.html

  • docx_to_md.md

其中,docx_to_html.html 是 Word 文档转换为 HTML 后的文档:

Python实现Word文档转换Markdown的示例

docx_to_md.md 是 HTML 转换为 Markdown 后的文档:

Python实现Word文档转换Markdown的示例

最后是另存为的图片:

Python实现Word文档转换Markdown的示例

怎么样,简单的二三十行代码就完成了 Word 到 Markdown 文档的转换,是不是很简单?

此功能将集成到觅道文档作为文档导入的功能实现,欢迎持续进行关注!

  文章版权所有:州的先生博客

  原文地址:https://zmister.com/archives/1601.html

来源:https://zmister.com/archives/1601.html

标签:python,word,markdown
0
投稿

猜你喜欢

  • python解析html提取数据,并生成word文档实例解析

    2023-10-19 13:50:38
  • asp程序定义变量比不定义变量速度快一倍

    2012-12-04 20:06:32
  • SQL Server 2000日志转移实现高可用性

    2009-01-20 15:04:00
  • mysql查询一天,查询一周,查询一个月的数据

    2011-01-29 16:22:00
  • photoshop快捷键大全及使用技巧

    2007-10-26 07:40:00
  • PHP header()函数使用详细(301、404等错误设置)

    2023-11-02 17:28:23
  • Pytest+request+Allure实现接口自动化框架

    2023-08-12 17:29:33
  • ie7空格的间距要比ie6/firefox/opera的都要大

    2008-05-24 16:54:00
  • 再谈动态添加样式规则

    2009-09-02 13:10:00
  • H5+css3+js搭建带验证码的登录页面

    2023-08-30 16:15:54
  • Python随机生成数模块random使用实例

    2022-08-04 21:04:48
  • 一个取图片尺寸的类,支持jpg,gif,png

    2007-10-18 10:25:00
  • php封装json通信接口详解及实例

    2023-11-14 21:56:26
  • 网页开发中的容易忽略的问题 javascript HTML中的table

    2023-09-04 20:43:52
  • ASP制作中使用MYSQL的分析

    2008-10-13 09:25:00
  • 浅谈javascript的分号[译]

    2009-12-13 10:34:00
  • 详解python字符串驻留技术

    2023-09-25 21:49:25
  • 基于OpenCV的PHP图像人脸识别技术

    2023-11-23 22:02:54
  • Firefox 下 innerHTML 的一个 BUG

    2008-08-05 18:19:00
  • SQL Server中使用DTS设计器进行数据转移

    2009-01-08 16:15:00
  • asp之家 网络编程 m.aspxhome.com