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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python3基础之基本运算符概述
Aug 13 Python
Python遍历文件夹和读写文件的实现代码
Aug 28 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
python如何实现一个刷网页小程序
Nov 27 Python
Python用Try语句捕获异常的实例方法
Jun 26 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
python SVD压缩图像的实现代码
Nov 05 Python
Python+Redis实现布隆过滤器
Dec 08 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
Sep 01 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
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
jquery中each遍历对象和数组示例
2014/08/05 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
20行JS代码实现粘贴板复制功能
2018/02/06 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
Python字符遍历的艺术
2008/09/06 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
自我评价的范文
2014/02/02 职场文书
公司接待方案
2014/03/08 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
高一军训口号
2015/12/25 职场文书
门面租赁合同范文
2019/08/06 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers