Python实现Word文档转换Markdown的示例
作者:州的先生 发布时间:2022-06-24 08:23:29
随着SaaS服务的流行,越来越多的人选择在各个平台上编写文档,制作表格并进行分享。
同时,随着Markdown语法的破圈,很多平台开始集成支持这种简洁的书写标记语言,这样可以保证平台上用户文档样式的统一性。
但是在一些场景下,我们还是会在本地的Office软件上写有很多文档,或者历史遗留了很多本地文档。
如果我们需要将其上传到各大平台,直接复制粘贴,大概率是会造成文档内容结构和样式的丢失。于此我们需要将其转换为 Markdown 语法。
很多桌面软件(比如Typora)都提供了导入 Word 文件的功能,这类功能一般是通过 Pandoc 这个软件来扩展实现的。
Pandoc 是一个全能型的文档格式转换工具,其能够将多种文档格式转换为各类常见的文档格式。具体的文档格式之间的转换如下图所示(来源于官网):
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 文档来演示。
代码如下所示:
# 读取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 后的文档:
docx_to_md.md 是 HTML 转换为 Markdown 后的文档:
最后是另存为的图片:
怎么样,简单的二三十行代码就完成了 Word 到 Markdown 文档的转换,是不是很简单?
此功能将集成到觅道文档作为文档导入的功能实现,欢迎持续进行关注!
文章版权所有:州的先生博客
原文地址:https://zmister.com/archives/1601.html
来源:https://zmister.com/archives/1601.html


猜你喜欢
- 本文实例讲述了Python实现115网盘自动下载的方法。分享给大家供大家参考。具体实现方法如下:实例中的1.txt,是网页http://bb
- 定义一个什么都不做的函数>>> def a():... pass...>>> def printHell
- 效果图from wxpyimport *import requestsfrom datetimeimport datetimeimport
- 什么是函数? 以前我们学过数学函数都知道,函数
- 背景开发项目时应学会站在巨人的肩膀上,即有效利用开发组件进行或工具提升自己的研发效率对于较简单的单体函数而言,只需要依赖原生的SDK即可完成
- 准备软件版本Django2.1.3Python3.7.1默认使用的是sqlite3DATABASES = { 'def
- 一.基本数据类型整数:int字符串:str(注:\t等于一个tab键)布尔值: bool列表:list 列表用[]元祖:tuple元祖用()
- Python 2.x 很快就要 失去官方支持 了,尽管如此,从 Python 2 迁移到 Python 3 却并没有想象中那么难。我在上周用
- 本文实例为大家分享了python人民币大小写转换的具体代码,供大家参考,具体内容如下大家应该都知道,银行打印账单有时候会跟上人民币的阿拉伯数
- 如下所示:var myarr=new Array(); //先声明一维 for(var i=0;i<2;i++){ //一
- 1.什么是Proxy?它的作用是?据阮一峰文章介绍:Proxy可以理解成,在目标对象之前架设一层 "拦截",当外界对该对
- 字符串函数ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) my
- python eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果。函数定义:eval(expression, global
- pytorch 在torchvision包里面有很多的的打包好的数据集,例如minist,Imagenet-12,CIFAR10 和CIFA
- 本文实例讲述了Python实现的桶排序算法。分享给大家供大家参考,具体如下:桶排序也叫计数排序,简单来说,就是将数据集里面所有元素按顺序列举
- 废话不多说了,直接上代码吧!import numpy as nparray = np.array([0, 0])for i in range
- ASP.NET利用它可以实现在线备份、还原数据库等各种功能。由于客户的数据库和WEB服务不再同一台服务器,把网站部署在服务器上以后,运行程序
- //interval变量 var inl = []; //原始透明度 var opa = 100; //判断浏览器 var ie = nav
- 一 描述720. 词典中最长的单词 - 力扣(LeetCode) (leetcode-cn.com)给出一个字符串数组 words
- 前言之前的一篇文章已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇,本文将详细介绍利用python爬虫框架scr