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


Posted in Python onDecember 22, 2020

随着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

以上就是Python实现Word文档转换Markdown的示例的详细内容,更多关于python Word文档转换Markdown的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
讲解Python中for循环下的索引变量的作用域
Apr 15 Python
举例讲解Python中的算数运算符的用法
May 13 Python
六个窍门助你提高Python运行效率
Jun 09 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
python监控进程脚本
Apr 12 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
Oct 11 Python
python监测当前联网状态并连接的实例
Dec 18 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
python全面解析接口返回数据
Feb 12 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
Dec 22 #Python
Django中ORM的基本使用教程
Dec 22 #Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 #Python
Python 多进程原理及实现
Dec 21 #Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 #Python
python 用pandas实现数据透视表功能
Dec 21 #Python
python 生成正态分布数据,并绘图和解析
Dec 21 #Python
You might like
php数组应用之比较两个时间的相减排序
2008/08/18 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
js window.onload 加载多个函数的方法
2009/11/02 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
javascript添加前置0(补零)的几种方法
2017/01/05 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
Python面向对象类的继承实例详解
2018/06/27 Python
Python中的引用知识点总结
2019/05/20 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
python如何构建mock接口服务
2021/01/28 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
西部世纪.net笔试题面试题
2014/04/03 面试题
假日旅行社实习自我鉴定
2013/09/24 职场文书
服务承诺书格式
2014/05/21 职场文书
县委务虚会发言材料
2014/10/20 职场文书
政协委员个人总结
2015/03/03 职场文书