一段神奇的Python代码,拿走不谢

liftword4周前 (04-26)技术文章12

大家好,我是章北海

我现在连写文档也要用 Cursor 了,WordMarkdown 是刚需

分享一个上周写的 Python 脚本,用于将 Microsoft Word 文档(.docx)转换为 Markdown 格式,同时保留文档中的格式和图片。

from docx import Document
from PIL import Image
import os
from base64 import b64encode
from docx.shape import InlineShape
def docx_to_markdown(docx_path, output_dir):
    # 创建输出目录
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # 创建 images 子目录
    images_dir = os.path.join(output_dir, 'images')
    if not os.path.exists(images_dir):
        os.makedirs(images_dir)
    
    # 打开 docx 文件
    doc = Document(docx_path)
    markdown_content = []
    
    # 处理每个段落
    for para in doc.paragraphs:
        # 提取文本
        text = para.text
        
        # 处理段落中的图片
        for run in para.runs:
            if run._element.drawing_lst:
                for drawing in run._element.drawing_lst:
                    # 获取图片关系 ID
                    rid = drawing.xpath('.//a:blip/@r:embed')[0]
                    image = doc.part.related_parts[rid]
                    
                    # 保存图片
                    image_filename = f'image_{len(os.listdir(images_dir))}.png'
                    image_path = os.path.join(images_dir, image_filename)
                    with open(image_path, 'wb') as f:
                        f.write(image.blob)
                    
                    # 添加 markdown 图片语法
                    text += f'\n![image](images/{image_filename})\n'
        
        # 添加到 markdown 内容
        markdown_content.append(text)
    
    # 写入 markdown 文件
    output_path = os.path.join(output_dir, 'output.md')
    with open(output_path, 'w', encoding='utf-8') as f:
        f.write('\n\n'.join(markdown_content))
    
    return output_path
# 使用示例
docx_path = '你的文档路径.docx'
output_dir = '输出目录路径'
markdown_file = docx_to_markdown(docx_path, output_dir)

脚本功能

  • 文本转换:将 docx 文档中的段落文本转换为 Markdown 格式。
  • 图片处理:提取文档中的图片并保存到 images 文件夹中,同时在 Markdown 文件中插入相应的图片引用。

在运行此脚本之前,请确保已安装以下软件:

  • Python 3.6 或更高版本
  • pip(Python 包管理器)

安装

  1. 拷贝代码在的本地计算机。
  2. 使用以下命令安装所需的 Python 库:pip install python-docx Pillow

使用方法

  1. 将您要转换的 .docx 文件放在项目目录中。
  2. 打开 docx_to_markdown.py 文件,并根据需要修改以下变量:docx_path = '你的文档路径.docx'
    output_dir =
    '输出目录路径'
  3. docx_path:要转换的 docx 文件的路径。
  4. output_dir:生成的 Markdown 文件和图片的输出目录。
  5. 在终端中运行脚本python docx_to_markdown.py
  6. 转换完成后,您将在指定的输出目录中找到 output.md 文件和 images 文件夹。output.md 是转换后的 Markdown 文件,images 文件夹中包含文档中的所有图片。

其实还能改成批量处理,感兴趣可以试试。

相关文章

从零入门Python测试神器pytest!高效测试,代码质量飙升10倍

引言:为什么测试是开发者的"金钟罩"?在编程江湖中,未经测试的代码如同没有铠甲的战士。今天要介绍的pytest,正是Python领域测试覆盖率排名第一的利器(2023年PyPI官方数据...

Python单元测试最佳实践指南:编写高效测试的7个核心技巧

作为Python开发者,编写单元测试是最值得培养(并不断提升)的优秀习惯之一。它能帮助您及早发现错误、简化调试过程,并让您有信心进行代码修改而不破坏现有功能。但并非所有测试都具有同等价值!如果测试代码...

python四个性能检测工具,包括函数的运行内存、时间等等...

这里总结了五个比较好的python性能检测工具,包括内存使用、运行时间、执行次数等方面。首先,来编写一个基础的python函数用于在后面的各种性能测试。def base_func(): for...

Python实现YOLOv8车道线与车辆检测

以下是一个基于YOLOv8和OpenCV实现车道线与车辆检测的Python示例代码,结合了深度学习目标检测和传统图像处理技术:pythonimport cv2import numpy as npfro...

Python进阶-day19: 测试与调试

一、课程目标理解测试的重要性:掌握软件测试的基本概念,了解单元测试在提高代码质量和可维护性中的作用。学习测试框架:熟悉Python中两种主流测试框架unittest和pytest的使用方法,理解它们的...

10 个 Python 单行代码搞定 Scikit-learn 任务,效率提升 80%!

你是否厌倦了写冗长的代码?这 10 个 Python 单行代码将帮你搞定 80% 的 Scikit-learn 任务!由 KDnuggets 技术编辑兼内容专家 Kanwal Mehreen 于 20...