最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Python實現(xiàn)Markdown文檔格式轉(zhuǎn)換詳解

 更新時間:2025年03月25日 08:53:21   作者:落痕的寒假  
這篇文章主要介紹了如何利用Python中的MarkItDown庫將多種文件高效轉(zhuǎn)換為Markdown文本,以及如何使用Python-Markdown庫將Markdown文本轉(zhuǎn)換為HTML,需要的可以參考下

Markdown是一種輕量級的標(biāo)記語言,用于以簡潔易讀的方式編寫文本內(nèi)容,同時能夠方便地轉(zhuǎn)換為結(jié)構(gòu)化的HTML文本或其他格式,常用于編寫文檔、博客、論壇帖子等。它與純文本極為接近,幾乎不帶任何標(biāo)記或格式,卻仍能有效呈現(xiàn)文檔的重要結(jié)構(gòu)。Markdown的詳細(xì)使用說明可參考:Markdown教程

主流的大型語言模型(LLM),如OpenAI的GPT-4,天生便“精通”Markdown,并且常常在未被提示的情況下將其融入回應(yīng)之中。此外,Markdown的規(guī)范還具有極高的編碼效率,可謂一舉多得。

因此,學(xué)習(xí)Markdown語言的使用,并通過Python實現(xiàn)Markdown文本與其他格式文本的相互轉(zhuǎn)換,能夠提高文檔編寫的效率和質(zhì)量,滿足不同場景下的文檔處理需求。

1 MarkItDown庫

1.1 MarkItDown庫介紹

MarkItDown庫是一款輕量級的Python版Markdown格式解析與渲染工具,能夠?qū)⒍喾N文件格式高效轉(zhuǎn)換為Markdown格式,從而滿足大語言模型(LLMs)及相關(guān)文本分析流程的需求。它專注于以Markdown格式精準(zhǔn)保留文檔的關(guān)鍵結(jié)構(gòu)與內(nèi)容,包括標(biāo)題、列表、表格、鏈接等元素。雖然其輸出結(jié)果既美觀又易于人類用戶閱讀,但其核心設(shè)計宗旨是為文本分析工具提供支持,因此對于那些需要高保真度轉(zhuǎn)換以供人類閱讀的文檔,它可能并非最優(yōu)選擇。

目前,MarkItDown庫支持以下文件類型的轉(zhuǎn)換:

  • PDF
  • PowerPoint(按從上到下、從左到右的順序讀取內(nèi)容)
  • Word
  • Excel
  • 圖片(支持EXIF元數(shù)據(jù)提取和光學(xué)字符識別OCR)
  • 音頻(支持EXIF元數(shù)據(jù)提取和語音轉(zhuǎn)錄)
  • HTML
  • 基于文本的格式(如CSV、JSON、XML)
  • ZIP文件(可遍歷文件內(nèi)的內(nèi)容進(jìn)行轉(zhuǎn)換)
  • YouTube網(wǎng)址
  • 以及其他更多類型!

MarkItDown庫的官方倉庫見:markitdown,MarkItDown需要在Python3.10及以上版本運行,MarkItDown庫安裝代碼如下:

pip install 'markitdown[all]~=0.1.0a1'

或者從源代碼安裝:

git clone git@github.com:microsoft/markitdown.git
cd markitdown
pip install -e packages/markitdown[all]

1.2 MarkItDown庫使用示例

MarkItDown庫將不同文件轉(zhuǎn)換為Markdown格式的方式非常簡單。只需初始化工具類,然后調(diào)用類對象的convert方法對文件進(jìn)行轉(zhuǎn)換,并輸出Markdown格式字符串即可。

示例 1

以下代碼展示了如何生成示例Excel數(shù)據(jù),并使用MarkItDown庫將其轉(zhuǎn)換為Markdown格式的字符串和文件:

import pandas as pd
import numpy as np

# 生成一些示例數(shù)據(jù)
np.random.seed(0)
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank'],
    'Age': [25, 30, 35, 40, 45, 50],
    'Gender': ['Female', 'Male', 'Male', 'Male', 'Female', 'Male'],
    'Score1': np.random.randint(0, 100, 6),
    'Score2': np.random.randint(0, 100, 6)
}

# 創(chuàng)建一個基本的DataFrame
df = pd.DataFrame(data)

# 添加多級索引
index = pd.MultiIndex.from_product([['Group A', 'Group B'], 
                                    ['Subgroup 1', 'Subgroup 2', 'Subgroup 3']], 
                                   names=['Group', 'Subgroup'])
df.index = index

# 計算每行的總分和平均分
df['Total Score'] = df[['Score1', 'Score2']].sum(axis=1)
df['Average Score'] = df[['Score1', 'Score2']].mean(axis=1)

# 顯示表格
# print(df)

# 保存表格為xlsx文件
df.to_excel('test.xlsx')

# 將excel轉(zhuǎn)換為markdown文件
from markitdown import MarkItDown

# 通過傳遞enable_plugins=Fals參數(shù),表明在進(jìn)行轉(zhuǎn)換時不啟用插件功能
md = MarkItDown(enable_plugins=False) 

# 調(diào)用md對象的convert方法,將test.xlsx文件進(jìn)行轉(zhuǎn)換
result = md.convert("test.xlsx")
# text_content為一個字符串
print(result.text_content)
# 返回結(jié)果為字典
print(result.__dict__)

# 將結(jié)果保存為Markdown文件
# 定義要保存的Markdown文件的文件名
output_file = "output.md"

# 以寫入模式打開文件,如果文件不存在則創(chuàng)建
with open(output_file, 'w', encoding='utf-8') as file:
    # 將轉(zhuǎn)換后的文本內(nèi)容寫入文件
    file.write(result.text_content)

示例 2

本示例展示了使用MarkItDown庫將pdf文件轉(zhuǎn)換為Markdown數(shù)據(jù),并開啟Azure Document Intelligence功能,也就是利用Microsoft文檔智能輔助進(jìn)行轉(zhuǎn)換。注意,此過程不會轉(zhuǎn)換PDF中的圖片。

import random
import string
# pip install fpdf
from fpdf import FPDF
from PIL import Image, ImageDraw, ImageFont

# 生成隨機文字
def generate_random_text(length):
    letters = string.ascii_letters + string.digits + string.punctuation
    return ''.join(random.choice(letters) for i in range(length))

# 生成隨機圖片
def generate_random_image(width, height):
    # 創(chuàng)建一個隨機顏色的圖片
    image = Image.new('RGB', (width, height), color=(
        random.randint(0, 255),
        random.randint(0, 255),
        random.randint(0, 255)
    ))
    draw = ImageDraw.Draw(image)
    font = ImageFont.load_default()
    # 在圖片上添加隨機文字
    text = generate_random_text(20)
    draw.text((10, 10), text, fill=(255, 255, 255), font=font)
    image_path = 'random_image.png'
    image.save(image_path)
    return image_path

# 創(chuàng)建PDF并添加隨機圖片和文字
def create_pdf():
    pdf = FPDF()
    pdf.add_page()

    # 添加隨機文字到PDF頂部
    top_text = generate_random_text(100)
    pdf.set_font("Arial", size=12)
    pdf.multi_cell(0, 10, txt=top_text)
    # 生成隨機圖片
    image_path = generate_random_image(300, 200)
    # 添加圖片到PDF
    pdf.image(image_path, x=10, y=pdf.get_y(), w=100)
    # 移動到圖片下方
    pdf.ln(210)
    # 添加隨機文字到PDF底部
    bottom_text = generate_random_text(100)
    pdf.multi_cell(0, 10, txt=bottom_text)

    # 保存PDF
    pdf.output("test.pdf")

# 創(chuàng)建PDF
create_pdf()
from markitdown import MarkItDown
# 將文檔轉(zhuǎn)換為markdown
# Azure文檔智能:可以使用Microsoft文檔智能進(jìn)行轉(zhuǎn)換
md = MarkItDown(docintel_endpoint="<document_intelligence_endpoint>")
# 不會轉(zhuǎn)換PDF中的圖片
result = md.convert("test.pdf")
print(result.text_content)

示例 3

本示例展示了借助MarkItDown庫使用大語言模型生成圖像描述。在初始化該工具類時,需提供大語言模型客戶端(llm_client)和大語言模型名字(llm_model)。

from markitdown import MarkItDown
from openai import OpenAI

client = OpenAI()
md = MarkItDown(llm_client=client, llm_model="gpt-4o")
result = md.convert("example.jpg")
print(result.text_content)

2 Python-Markdown庫

2.1 Python-Markdown庫介紹

若需將Markdown格式轉(zhuǎn)換為HTML或其他格式,可以使用Python中的Python-Markdown庫。該庫是Markdown格式轉(zhuǎn)換為HTML的純Python實現(xiàn),它支持標(biāo)準(zhǔn)的Markdown語法,并提供了許多擴展以增強功能。

Python-Markdown庫的官方倉庫見:Python-Markdown,Python-Markdown庫需要在Python3.7及以上版本運行,Python-Markdown庫安裝代碼如下:

pip install markdown

2.2 Python-Markdown庫使用示例

示例 1

本示例展示了如何基于Python-Markdown庫將Markdown文本轉(zhuǎn)換為HTML。需注意,Python-Markdown庫采用的是原始Markdown語法,即當(dāng)列表項由多個段落構(gòu)成時,列表項中每個后續(xù)段落都必須以4個空格的縮進(jìn)起始。

import markdown
print(f'Markdown Version: {markdown.__version__}')

# 定義Markdown文本
markdown_text = """
# 這是一個markdown標(biāo)題
這是一段普通文字,后續(xù)為列表項需要換行或者4個空格。

- 列表項 1
- 列表項 2

[markdown超鏈接](https://www.example.com)
"""

# 將Markdown文本轉(zhuǎn)換為 HTML
html_text = markdown.markdown(markdown_text)

# 打印轉(zhuǎn)換后的HTML文本
print(html_text)

示例 2

本示例展示了基于Python-Markdown庫從本地Markdown文件中讀取內(nèi)容,并將其轉(zhuǎn)換為HTM格式:

import markdown

def create_example_markdown(file_path):
    example_content = """
# markdown示例標(biāo)題

這是一個示例的Markdown文件內(nèi)容。

## 子標(biāo)題

下面是一個無序列表:

- 列表項 1
- 列表項 2

這里還有一個有序列表:

1. 有序項 1
2. 有序項 2
"""

    try:
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write(example_content)
        print("示例 Markdown 文件已創(chuàng)建。")
    except Exception as e:
        print(f"錯誤: 創(chuàng)建文件時發(fā)生未知錯誤: {e}")

def read_markdown_file(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            return file.read()
    except FileNotFoundError:
        print(f"錯誤: 文件 {file_path} 未找到。")
        return None
    except Exception as e:
        print(f"錯誤: 讀取文件時發(fā)生未知錯誤: {e}")
        return None

# 創(chuàng)建本地示例markdown文件
file_path = 'example.md'
create_example_markdown(file_path)

markdown_text = read_markdown_file(file_path)
if markdown_text is not None:
    html_text = markdown.markdown(markdown_text)
    print(html_text)

示例 3

本示例展示了在使用Python-Markdown庫將Markdown文本轉(zhuǎn)換為HTML的過程中,如何運用自定義擴展函數(shù)來修改生成的HTML格式。例如為標(biāo)題和列表項添加樣式。

from markdown.treeprocessors import Treeprocessor
from markdown.extensions import Extension

class MarkdownStyleProcessor(Treeprocessor):
    # 遍歷html節(jié)點設(shè)置不同參數(shù)
    def run(self, tree_root):
        for element in tree_root.iter():
            if element.tag == "h1":
                element.set("class", "custom-h1")
                element.set("style", "color: #007BFF; font-size: 2.5em; margin-bottom: 0.5em;")
            elif element.tag == "h2":
                element.set("class", "custom-h2")
                element.set("style", "color: #00FF00; font-size: 1.1em; margin-bottom: 0.3em;")

class MarkdownStyleExtension(Extension):
    # 該方法用于擴展Markdown對象
    def extendMarkdown(self, markdown_obj):
        # markdown_style定義處理的名字。10表示表示處理器的優(yōu)先級,值越大越往后處理
        markdown_obj.treeprocessors.register(MarkdownStyleProcessor(markdown_obj), "markdown_style", 10)

import markdown

try:
    with open("example.md", "r", encoding="utf-8") as file:
        markdown_content = file.read()

    # 將Markdown內(nèi)容轉(zhuǎn)換為HTML,同時使用自定義的擴展
    html_result = markdown.markdown(
        markdown_content,
        extensions=[MarkdownStyleExtension()]
    )
    print(html_result)
except Exception as e:
    print(f"發(fā)生錯誤: {e}")

示例 4

Python-Markdown庫集成了若干插件,用以支持不同類型Markdown語法的轉(zhuǎn)換。這些插件的調(diào)用可通過轉(zhuǎn)換函數(shù)的extensions參數(shù)進(jìn)行設(shè)置。以下是可擴展的功能及調(diào)用參數(shù):

擴展功能調(diào)用參數(shù)模塊路徑
額外功能extramarkdown.extensions.extra
縮寫abbrmarkdown.extensions.abbr
屬性列表attr_listmarkdown.extensions.attr_list
定義列表def_listmarkdown.extensions.def_list
圍欄代碼塊fenced_codemarkdown.extensions.fenced_code
腳注footnotesmarkdown.extensions.footnotes
HTML中的Markdownmd_in_htmlmarkdown.extensions.md_in_html
表格tablesmarkdown.extensions.tables
警告admonitionmarkdown.extensions.admonition
代碼高亮codehilitemarkdown.extensions.codehilite
遺留屬性legacy_attrsmarkdown.extensions.legacy_attrs
遺留強調(diào)legacy_emmarkdown.extensions.legacy_em
元數(shù)據(jù)metamarkdown.extensions.meta
新行轉(zhuǎn)斷行nl2brmarkdown.extensions.nl2br
合理列表sane_listsmarkdown.extensions.sane_lists
智能標(biāo)點smartymarkdown.extensions.smarty
目錄tocmarkdown.extensions.toc
Wiki鏈接wikilinksmarkdown.extensions.wikilinks

以下代碼展示了如何基于Python-Markdown庫從文件中讀取Markdown內(nèi)容,并利用該庫的擴展功能來增添額外特性,例如腳注、代碼塊和表格。

示例markdown文件如下:

# 示例

示例代碼如下[^1]:

print("Hello World!")

示例表格如下[^2]:

|姓名|年齡|
|:-|-:|
|張三|16|
|李四|23|

[^1]: 示例代碼
[^2]: 示例表格

轉(zhuǎn)換代碼如下:

import markdown

with open("example.md", "r", encoding="utf-8") as fd:
    markdown_text = fd.read()

# 通過extensions參數(shù)設(shè)置轉(zhuǎn)換格式
html_output = markdown.markdown(
    markdown_text,
    extensions=["tables", "footnotes", "fenced_code"]
)

print(html_output)

以上就是利用Python實現(xiàn)Markdown文檔格式轉(zhuǎn)換詳解的詳細(xì)內(nèi)容,更多關(guān)于Python Markdown格式轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Django項目搭建之實現(xiàn)簡單的API訪問

    Django項目搭建之實現(xiàn)簡單的API訪問

    這篇文章主要給大家介紹了關(guān)于Django項目搭建之實現(xiàn)簡單的API訪問的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-02-02
  • PyQt5+requests實現(xiàn)車票查詢工具

    PyQt5+requests實現(xiàn)車票查詢工具

    這篇文章主要為大家詳細(xì)介紹了PyQt5+requests實現(xiàn)車票查詢工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python opencv缺陷檢測的實現(xiàn)及問題解決

    Python opencv缺陷檢測的實現(xiàn)及問題解決

    這篇文章主要介紹了Python opencv缺陷檢測的實現(xiàn)及問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python3使用logging包,如何把日志寫到系統(tǒng)的rsyslog中

    python3使用logging包,如何把日志寫到系統(tǒng)的rsyslog中

    這篇文章主要介紹了python3使用logging包,如何把日志寫到系統(tǒng)的rsyslog中的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python浮點數(shù)取整、格式化和NaN處理的操作方法

    Python浮點數(shù)取整、格式化和NaN處理的操作方法

    這篇文章主要介紹了Python浮點數(shù)取整、格式化和NaN處理的操作方法,本文較詳細(xì)介紹了取整的三種方法,格式化浮點數(shù)輸出的示例代碼詳解,感興趣的朋友跟隨小編一起看看吧
    2022-05-05
  • 詳解python的xlwings庫讀寫excel操作總結(jié)

    詳解python的xlwings庫讀寫excel操作總結(jié)

    這篇文章主要介紹了詳解python的xlwings庫讀寫excel操作總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python3生成隨機數(shù)實例

    python3生成隨機數(shù)實例

    這篇文章主要介紹了python3生成隨機數(shù)的用法,實例講述了基于Python的隨機數(shù)的小程序,需要的朋友可以參考下
    2014-10-10
  • 實例探究Python以并發(fā)方式編寫高性能端口掃描器的方法

    實例探究Python以并發(fā)方式編寫高性能端口掃描器的方法

    端口掃描器就是向一批端口上發(fā)送請求來檢測端口是否打開的程序,這里我們以實例探究Python以并發(fā)方式編寫高性能端口掃描器的方法
    2016-06-06
  • opencv中圖像疊加/圖像融合/按位操作的實現(xiàn)

    opencv中圖像疊加/圖像融合/按位操作的實現(xiàn)

    這篇文章主要介紹了opencv中圖像疊加/圖像融合/按位操作的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python運行出現(xiàn)DeprecationWarning的問題及解決

    Python運行出現(xiàn)DeprecationWarning的問題及解決

    這篇文章主要介紹了Python運行出現(xiàn)DeprecationWarning的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論

禹州市| 海伦市| 肇源县| 张北县| 新丰县| 玛沁县| 泾阳县| 科尔| 通渭县| 绥德县| 湄潭县| 修文县| 罗甸县| 仙桃市| 肇州县| 永善县| 焦作市| 阿拉善右旗| 蒙城县| 太仓市| 山丹县| 霍邱县| 麦盖提县| 金秀| 乐安县| 锡林郭勒盟| 甘孜县| 体育| 扶绥县| 高邑县| 唐河县| 定日县| 新蔡县| 疏勒县| 黄骅市| 灵宝市| 恩平市| 新龙县| 喜德县| 石屏县| 福清市|