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

Python使用Mammoth將DOCX轉(zhuǎn)換為HTML

 更新時間:2026年01月21日 08:38:22   作者:前端玖耀里  
這篇文章主要介紹了如何使用Python的Mammoth庫將DOCX文件轉(zhuǎn)換為HTML,包括安裝Mammoth、提取文本、自定義樣式映射、處理圖像以及使用命令行工具進(jìn)行轉(zhuǎn)換,需要的朋友可以參考下

我們在實(shí)際的項目開發(fā)的過程中,有時候不得不將文件從一種格式轉(zhuǎn)換為另一種格式。

DOCX(由 Microsoft Word 使用)是一種非常常見的文件格式,被很多人使用。有時候,我們希望將 Word 文檔轉(zhuǎn)換為 HTML。

這可以通過 Mammoth 包輕松實(shí)現(xiàn)。它是一個用于將 DOCX 文件轉(zhuǎn)換為 HTML 的簡單、高效、快速的庫。在本文中,我們將學(xué)習(xí)如何在 Python 中使用 Mammoth 將 DOCX 轉(zhuǎn)換為 HTML。

安裝 Mammoth

首先,在安裝之前準(zhǔn)備好并激活你的虛擬環(huán)境:

python3 -m venv myenv
. myenv/bin/activate

然后,使用pip安裝 Mammoth:

pip3 install mammoth

本教程使用的 Mammoth 版本是 1.4.15。在測試的時候,請確保它是.docx 文件!

以上環(huán)境準(zhǔn)備好后,現(xiàn)在讓我們開始提取文本并將其轉(zhuǎn)換成 HTML。

提取 DOCX 文件的原始文本

在轉(zhuǎn)換為 HTML 時保留格式是 Mammoth 的最佳功能之一。這里我們只需要幾行代碼轉(zhuǎn)換成你需要 DOCX 文件的文本。

使用 extract_raw_text()方法來獲取它:

import mammoth

with open(input_filename, "rb") as docx_file:
    result = mammoth.extract_raw_text(docx_file)
    text = result.value # The raw text
    with open('output.txt', 'w') as text_file:
        text_file.write(text)

注意,此方法不會返回有效的 HTML 文檔。它只返回頁面上的文本,因此我們使用.txt 擴(kuò)展來保存它。如果你確實(shí)需要保持布局或格式,你需要提取 HTML 內(nèi)容。

將 Docx 轉(zhuǎn)換為 HTML 并自定義樣式映射

默認(rèn)情況下,Mammoth 將文檔轉(zhuǎn)換為 HTML,但它不會提供有效的 HTML 頁面。雖然網(wǎng)頁瀏覽器可以顯示內(nèi)容,但它缺少一個<html>標(biāo)簽來封裝文檔,以及一個<body>標(biāo)簽來包含文檔。

假設(shè)使用的是帶有模板的網(wǎng)絡(luò)框架??赡軙x一個模板來顯示 Word 文檔,并將 Mammoth 的輸出加載到模板主體內(nèi)。

Mammoth 不僅在如何使用其輸出方面具有靈活性,而且在如何創(chuàng)建輸出方面也具有很大的靈活性。特別是在我們想要樣式化我們生成的 HTML 時,我們有很多選項。我們通過將每個 DOCX 格式規(guī)則匹配到相應(yīng)的 CSS 規(guī)則來映射樣式。

要查看你的 DOCX 文件有哪些樣式,你有兩個選擇:

  1. 使用 MS Word 打開您的 docx 文件,并檢查樣式工具欄。
  2. 通過用解壓管理器打開你的 DOCX 文件來研究 XML 文件,然后導(dǎo)航到/word/styles.xml并找到你的樣式。

第二個選項適用于無法使用 MS Word 或無法解釋和顯示樣式的替代文字處理程序的用戶。

Mammoth 已經(jīng)默認(rèn)涵蓋了某些最常用的樣式映射。例如,Heading1在 docx 樣式中映射到 HTML 元素的<h1>,bold被映射到 HTML 元素的<strong>,等等。

我們還可以在映射時使用 Mammoth 來自定義文檔的樣式。例如,如果您想將 DOCX 文件中的所有bold出現(xiàn)次數(shù)更改為 HTML 中的斜體,可以這樣子實(shí)現(xiàn):

import mammoth

custom_styles = "b => i"

with open(input_filename, "rb") as docx_file:
    result = mammoth.convert_to_html(docx_file, style_map = custom_styles)
    text = result.value
    with open('output.html', 'w') as html_file:
        html_file.write(text)

通過 custom_styles 變量,左邊的樣式來自 DOCX 文件,而右邊的是相應(yīng)的 CSS。

假設(shè)我們想完全省略粗體出現(xiàn)的次數(shù),我們可以將映射目標(biāo)留空:

custom_styles = "b => "

有時我們轉(zhuǎn)換的文檔會有很多樣式需要保留。這個時候再這樣實(shí)現(xiàn)就會變得不切實(shí)際,要為每一個我們要映射的樣式都創(chuàng)建一個變量。

不過有解法,我們可以使用docstrings一次映射我們想要的任意多個樣式:

custom_styles = """ b => del
                    u => em
                    p[style-name='Heading 1'] => i"""

你可能已經(jīng)注意到,最后的映射與其他的有點(diǎn)不同。在映射樣式時,我們可以使用方括號[]并在其中添加條件,這樣只有部分元素會以這種方式進(jìn)行樣式設(shè)置。

在我們的示例中,p[style-name='Heading 1']選擇具有樣式名稱的段落Heading 1。我們也可以使用p[style-name^='Heading']來選擇具有以Heading開頭的樣式名稱的每個段落。

樣式映射還允許我們將樣式映射到自定義 CSS 類。通過這樣做,我們可以隨心所欲地修改 HTML 的樣式。讓我們舉一個例子,我們在文檔字符串中定義基本的自定義 CSS:

custom_css ="""
    <style>
    .red{
        color: red;
    }
    .underline{
        text-decoration: underline;
    }
    .ul.li{
        list-style-type: circle;
    }
    table, th, td {
    border: 1px solid black;
    }
    </style>
    """

現(xiàn)在我們可以更新我們的映射,以引用我們在<style>塊中定義的 CSS 類:

custom_styles = """ b => b.red
                    u => em.red
                    p[style-name='Heading 1'] => h1.red.underline"""

并將 CSS 和 HTML 合并在一起:

edited_html = custom_css + html

這個時候如果 DOCX 文件包含任何這些元素,就能看到我們設(shè)置的樣式結(jié)果。

通過以上方法我們已經(jīng)知道如何映射樣式,那就讓我們使用一個更著名的 CSS 框架(以及相關(guān)的 JS)來讓我們的 HTML 看起來更好,并練習(xí)一個更有可能的現(xiàn)實(shí)場景。

使用 Bootstrap(或其他任何前端框架)映射樣式

就像我們之前處理custom_css一樣,我們需要確保 CSS 與 HTML 一起加載。我們需要將 Bootstrap 文件 URI 或 CDN 添加到我們的 HTML 中:

bootstrap_css = '<link   rel="external nofollow"  rel="external nofollow"  rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">'
bootstrap_js = '<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.bundle.min.js" integrity="sha384-b5kHyXgcpbZJO/tY9Ul7kGkf1S0CWuKcCD38l8YkeH8z8QjE0GmW1gYU5S9FOnJ0" crossorigin="anonymous"></script>'

這里我稍微調(diào)整我們的 custom_styles,以匹配我們的新 CSS 類:

custom_styles = """ b => b.mark
                    u => u.initialism
                    p[style-name='Heading 1'] => h1.card
                    table => table.table.table-hover
                    """

在第一行,我們將粗體 DOCX 樣式映射到具有類的 HTML 元素,該類是 HTML 標(biāo)簽的 Bootstrap 類,用于突出顯示文本的一部分。b mark <mark>

在第二行,我們?yōu)?HTML 元素添加了類,稍微減小了字體大小,并將文本轉(zhuǎn)換為大寫。initialism u

在第三行,我們選擇所有具有樣式名稱的段落,并將其轉(zhuǎn)換為具有 Bootstrap 類的 HTML 元素,該類為元素設(shè)置多個樣式屬性,例如背景顏色、位置和邊框。Heading 1 h1 card

在最后一行,我們將 docx 文件中的所有表格轉(zhuǎn)換為 HTML 元素,并使用 Bootstrap 的類來給它一個新的外觀,同時我們通過添加 Bootstrap 類使其在懸停時高亮顯示。table table table-hover

和之前一樣,我們使用點(diǎn)符號將多個類映射到同一個 HTML 元素,即使這些樣式來自另一個來源。

最后,將 Bootstrap CDNs 添加到我們的 HTML 中:

edited_html = bootstrap_css + html + bootstrap_js

現(xiàn)在可以分享我們的 HTML,以下是完整的代碼以供參考:

import mammoth

input_filename = "file-sample_100kB.docx"

custom_styles = """ b => b.mark
                    u => u.initialism
                    p[style-name='Heading 1'] => h1.card
                    table => table.table.table-hover
                    """


bootstrap_css = '<link   rel="external nofollow"  rel="external nofollow"  rel="stylesheet" integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl" crossorigin="anonymous">'
bootstrap_js = '<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.bundle.min.js" integrity="sha384-b5kHyXgcpbZJO/tY9Ul7kGkf1S0CWuKcCD38l8YkeH8z8QjE0GmW1gYU5S9FOnJ0" crossorigin="anonymous"></script>'


with open(input_filename, "rb") as docx_file:
    result = mammoth.convert_to_html(docx_file, style_map = custom_styles)
    html = result.value 

edited_html = bootstrap_css + html + bootstrap_js

output_filename = "output.html"
with open(output_filename, "w") as f: 
    f.writelines(edited_html)

此外,需要注意的一點(diǎn)是,在實(shí)際情況下,你可能不會像我們在這里所做的那樣直接將 Bootstrap CSS 添加到 HTML 內(nèi)容中。相反,你會將 HTML 內(nèi)容加載或注入到一個特殊的 HTML 頁面中,該頁面已經(jīng)包含了必要的 CSS 和 JS 捆綁包。

Mammoth 還允許我們修改我們正在轉(zhuǎn)換的內(nèi)容。

處理我們不想分享的圖片

假設(shè)我們希望跳過 DOCX 文件中的圖像不進(jìn)行轉(zhuǎn)換。convert_to_html()方法接受一個convert_image參數(shù),這是一個圖像處理函數(shù)。它返回一個應(yīng)該轉(zhuǎn)換并添加到 HTML 文檔中的圖像列表。

當(dāng)然,如果我們覆蓋它并返回一個空列表,它們將從轉(zhuǎn)換后的頁面中省略:

def ignore_image(image):
    return []

現(xiàn)在,讓我們將該函數(shù)作為參數(shù)傳遞到convert_to_html()方法中:

with open(input_filename, "rb") as docx_file:
    result = mammoth.convert_to_html(docx_file, style_map = custom_styles, convert_image=ignore_image)
    html = result.value
    with open('output.html', 'w') as html_file:
        html_file.write(text)

就是這樣! Mammoth 在生成 HTML 文件時將忽略所有圖像。

到目前為止,我們一直在用 Python 編程方式使用 Mammoth。Mammoth 也是一個命令行工具,因此我們有了另一個將 DOCX 轉(zhuǎn)換為 HTML 的接口。讓我們在下一節(jié)中看看它的工作情況。

使用命令行工具將 DOCX 轉(zhuǎn)換為 HTML

使用 Mammoth 的 CLI 進(jìn)行文件轉(zhuǎn)換通常如下所示:

mammoth path/to/input_filename.docx path/to/output.html

如果你想將圖像從 HTML 中分離出來,可以指定一個輸出文件夾:

mammoth file-sample_100kB.docx --output-dir=imgs

我們也可以像在 Python 中那樣添加自定義樣式。首先需要創(chuàng)建一個自定義樣式文件:

touch my-custom-styles

然后,我們將在其中添加自定義樣式,語法與之前相同:

b => b.red
u => em.red
p[style-name='Heading 1'] => h1.red.underline

現(xiàn)在我們可以生成帶有自定義樣式的 HTML 文件:

mammoth file-sample_100kB.docx output.html --style-map=my-custom-styles

大功告成!您的文檔已按定義的自定義樣式進(jìn)行轉(zhuǎn)換。

結(jié)語

文件類型轉(zhuǎn)換在處理網(wǎng)頁技術(shù)時是一種常見需求。將 DOCX 文件轉(zhuǎn)換為易于操作的 HTML 格式,使我們能夠根據(jù)需要重建數(shù)據(jù)。使用 Mammoth,我們學(xué)會了如何從 docx 中提取文本并將其轉(zhuǎn)換為 HTML。

在轉(zhuǎn)換為 HTML 時,我們可以使用我們創(chuàng)建的 CSS 規(guī)則或常見的 UI 框架提供的規(guī)則來樣式化輸出。我們還可以省略不需要在 HTML 中可用的數(shù)據(jù)。

以上就是Python使用Mammoth將DOCX轉(zhuǎn)換為HTML的詳細(xì)內(nèi)容,更多關(guān)于Python Mammoth將DOCX轉(zhuǎn)HTML的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python?Pygame實(shí)戰(zhàn)之歡樂打地鼠游戲

    Python?Pygame實(shí)戰(zhàn)之歡樂打地鼠游戲

    打地鼠是一款比較經(jīng)典的敏捷類游戲,我們可以在許多商場門口看到這類游戲機(jī),在電腦和手機(jī)上也有許多類似的游戲。本文將用Python中的Pygame庫實(shí)現(xiàn)這一游戲,需要的可以參考一下
    2022-02-02
  • pytorch中函數(shù)tensor.numpy()的數(shù)據(jù)類型解析

    pytorch中函數(shù)tensor.numpy()的數(shù)據(jù)類型解析

    這篇文章主要介紹了pytorch中函數(shù)tensor.numpy()的數(shù)據(jù)類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 淺談matplotlib.pyplot與axes的關(guān)系

    淺談matplotlib.pyplot與axes的關(guān)系

    這篇文章主要介紹了淺談matplotlib.pyplot與axes的關(guān)系,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python?turtle庫(繪制螺旋正方形)

    Python?turtle庫(繪制螺旋正方形)

    這篇文章主要介紹了Python?turtle庫(繪制螺旋正方形),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 實(shí)例詳解Python中的numpy.abs和abs函數(shù)

    實(shí)例詳解Python中的numpy.abs和abs函數(shù)

    Numpy是python中最有用的工具之一,它可以有效地處理大容量數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python中numpy.abs和abs函數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • 一篇文章帶你了解kali局域網(wǎng)攻擊

    一篇文章帶你了解kali局域網(wǎng)攻擊

    這篇文章主要給大家介紹了kali的局域網(wǎng)攻擊,小編覺得這篇文章還是不錯的,使用起來也是非常方便的,需要的朋友可以參考下
    2021-08-08
  • python實(shí)現(xiàn)刪除文件與目錄的方法

    python實(shí)現(xiàn)刪除文件與目錄的方法

    這篇文章主要介紹了python實(shí)現(xiàn)刪除文件與目錄的方法,詳細(xì)的分析了涉及Python文件操作的各種方法,需要的朋友可以參考下
    2014-11-11
  • Python的json模塊中json.load()和json.loads()的區(qū)別

    Python的json模塊中json.load()和json.loads()的區(qū)別

    這篇文章主要介紹了Python的json模塊中json.load()和json.loads()的區(qū)別,json.load用于從一個文件對象中讀取JSON數(shù)據(jù)并將其解析為Python對象,而json.loads用于解析一個JSON格式的字符串并將其轉(zhuǎn)換為Python對象,根據(jù)你的具體需求選擇使用哪個方法,需要的朋友可以參考下
    2024-12-12
  • Python中進(jìn)行表單處理的方法詳解

    Python中進(jìn)行表單處理的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Python中進(jìn)行表單處理的方法,分別是利用Flask和Flask-WTF處理表單,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-12-12
  • 20個常用Python運(yùn)維庫和模塊

    20個常用Python運(yùn)維庫和模塊

    本篇文章給大家整理了20個最常用Python運(yùn)維中用到的庫和模塊,希望我們整理的內(nèi)容對大家有所幫助。
    2018-02-02

最新評論

公主岭市| 抚松县| 东乌珠穆沁旗| 中阳县| 德化县| 银川市| 兴宁市| 祁东县| 葵青区| 车险| 张北县| 贡觉县| 山阳县| 海安县| 甘洛县| 柳林县| 射阳县| 延寿县| 璧山县| 闽清县| 迁安市| 渝北区| 克拉玛依市| 神池县| 禹城市| 建阳市| 三亚市| 水城县| 济南市| 凯里市| 庄浪县| 胶州市| 二连浩特市| 鞍山市| 高安市| 潞西市| 确山县| 咸丰县| 都安| 长丰县| 临安市|