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

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

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

(0)

相关推荐

  • python 自动化将markdown文件转成html文件的方法

    一.背景 我们项目开发人员写的文档都是markdown文件.对于其它组的同学要进行阅读不是很方便.每次编辑完markdown文件,我都是用软件将md文件转成html文件.刚开始转的时候,还没啥,转得次数多了,就觉得不能继续这样下去了.作为一名开发人员,还是让机器去做这些琐碎的事情吧.故写了两个脚本将md文件转成html文件,并将其放置在web服务器下,方便其他人员阅读. 主要有两个脚本和一个定时任务: •一个python脚本,主要将md文件转成html文件: •一个shell脚本,主要用于管理逻

  • python使用html2text库实现从HTML转markdown的方法详解

    如果PyPi上搜html2text的话,找到的是另外一个库:Alir3z4/html2text.这个库是从aaronsw/html2text fork过来,并在此基础上对功能进行了扩展.因此是直接用pip安装的,因此本文主要来讲讲这个库. 首先,进行安装: pip install html2text 命令行方式使用html2text 安装完后,就可以通过命令html2text进行一系列的操作了. html2text命令使用方式为:html2text [(filename|url) [encodi

  • Python操作word文档插入图片和表格的实例演示

    前言 图片是Word的一种特殊内容,这篇文章主要介绍了关于Python操作word文档,向里面插入图片和表格的相关内容,下面话不多说了,来一起看看详细的代码 实例代码: # -*- coding: UTF8 -*- from docx import Document from docx.shared import Pt doc = Document() # 文件存储路径 path = "C:\\Users\\Administrator\\Desktop\\word文档\\" # 读取文

  • 使用Python来开发Markdown脚本扩展的实例分享

    关于Markdown 在刚才的导语里提到,Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处理软件 Word 或 Pages 有大量的排版.字体设置.它使我们专心于码字,用「标记」语法,来代替常见的排版格式.例如此文从内容到格式,甚至插图,键盘就可以通通搞定了.目前来看,支持 Markdown 语法的编辑器有很多,包括很多网站(例如简书)也支持了 Markdown 的文字录入.Markdown 从写作到完成,导出格式随心所欲,你可以导出 HTML

  • Python word文本自动化操作实现方法解析

    之前介绍了一个Python包 openpyxl ,用于处理 Excel :而对于 Word 文本时同样也有对应的 Python库 Python-docx,在日常办公中,如果需要处理多个 word 文本,且操作步骤都是重复单调的,我想这个库就可以帮到你 在了解 Python-docx 常用函数之前,需要知道 在 Python-docx 各命令所对应 word 各部件,下图所示, Document 指的是 word 文档: paragraph 对应段落: run 对应 一句话中的各个字段,样式调整时

  • python3处理word文档实例分析

    直接使用word文档已经难不倒大家了,有没有想过用python构建一个word文档写点文章呢?当然这个文章的框架需要我们用代码一点点的建立,在过程上有一点繁琐,一下子看不懂的小伙伴可以把它拆分成几个部分来看.下面就在python3处理word文档的代码给大家带来讲解,还会有一些设置文章格式的技巧. 一个Word文档,主要由下面这些内容元素构成,每个元素都有对应的方法处理: 标题:add_heading() 段落:add_paragraph() 文本:add_run(),其返回对象支持设置文本属性

  • 如何用Python实现简单的Markdown转换器

    今天心血来潮,写了一个 Markdown 转换器. import os, re,webbrowser text = ''' # TextHeader ## Header1 List - 1 - 2 - 3 > **quote** > quote2 ## Header2 1. *斜体* 2. [@以茄之名](https://www.jb51.net/people/e4f87c3476a926c1e2ef51b4fcd18fa3) 3. ![](https://www.jb51.net/v2-85

  • 解决python Markdown模块乱码的问题

    有个需求需要把markdown转成html模块,查询了一下刚好有这个模块 安装 pip install amrkdown 安装完成直接转换并保存为html时,发现出现中文乱码的情况 用编辑器打开发现是缺少utf8编码 所以只需要在头增加一行<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 即可 查询Markdown包安装地址 pip install markdown

  • python导出chrome书签到markdown文件的实例代码

    python导出chrome书签到markdown文件,主要就是解析chrome的bookmarks文件,然后拼接成markdown格式的字符串,最后输出到文件即可.以下直接上代码,也可以在 py-chrome-bookmarks-markdown 中直接参见源码. from json import loads import argparse from platform import system from re import match from os import environ from

  • 获取CSDN文章内容并转换为markdown文本的python

    自己写的小工具,可以直接获取csdn文章并转换为markdown格式 效果图 核心代码 from PySide2.QtWidgets import QApplication,QMainWindow,QPushButton,QPlainTextEdit,QMessageBox import re import parsel import tomd import requests class CSDN(): def __init__(self): self.windows = QMainWindow

  • Python3自动生成MySQL数据字典的markdown文本的实现

    为啥要写这个脚本 五一前的准备下班的时候,看到同事为了做数据库的某个表的数据字典,在做一个复杂的人工操作,就是一个字段一个字段的纯手撸,那速度可想而知是多么的折磨和锻炼人的意志和耐心,反正就是很耗时又费力的活,关键是工作效率太低了,于是就网上查了一下,能否有在线工具可用,但是并没有找到理想和如意的,于是吧,就干脆自己撸一个,一劳永逸,说干就干的那种-- 先屡一下脚本思路 第一步:输入或修改数据库连接配置信息,以及输入数据表名 第二步:利用pymysql模块连接数据库,并判断数据表是否存在 第三步

随机推荐