溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python將word文件轉換成html

發布時間:2021-08-12 15:31:24 來源:億速云 閱讀:249 作者:chen 欄目:編程語言

這篇文章主要介紹“怎么用Python將word文件轉換成html”,在日常操作中,相信很多人在怎么用Python將word文件轉換成html問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Python將word文件轉換成html”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

 

最近公司一個客戶大大購買了一堆醫療健康方面的科普文章,希望能放到我們正在開發的健康檔案管理軟件上??蛻舸蟠笳f,要智能推送!要掌握節奏!要深度學習!要讓用戶留戀網站無法自拔!

話說符合以上特點的我也只能聯想到某榴了。

當然,萬里長征的第一步是把文章導入我們的數據庫。項目使用的是AWSdynamoDB,是非關系型數據庫,所有內容都是以json的形式儲存的。而客戶大大購買來的文章,一共600多篇,要么是word要么是Adobe indesignindd。找了一圈,沒有發現合適的應用可以把wordindd轉化成干凈的html。所以我只能自己造輪子啦~聽說python很擅長文本處理,所以就是你了,python!這是我第一次用python寫項目,不符合規范的地方歡迎大神提點。

太長不看

用逆天的python 模塊mammothdocx 處理你的word文件;把indd批量轉化成pdf然后用layout_scanner轉化成html。

word批量轉化為html

1、 建立文件結構并批量讀取文件

在根目錄下創建幾個文件夾,用來放不同格式的文件,我把所有要處理的word文件放在docfiles 這個子目錄里。word.py里寫轉化程序。

1.         ├── docfiles

2.          

3.         ├── imgs

4.          

5.         ├── inddfiles

6.          

7.         ├── output

8.          

9.         └── pdfs

10.       

11.      └── word.py

2、引入模塊和申明文件路徑

1.         import mammoth

2.         import mammoth.transforms

3.         import os

4.         from docx import Document

5.         from bson import json_util

6.         import zipfile

7.         import json

8.         import unidecode

9.         import requests

10.       

11.      guidUrl = "https://my.phrplus.com/REST/guid"

12.      inputPath = '/Users/admin/cwell/parser/docfiles/'

13.      imgPath = "/Users/admin/cwell/parser/imgs/"

14.      outputFile = '/Users/admin/cwell/parser/output/output.json'

mammoth: 核心組件,用來做轉化工作

docx: 另一個做轉化工作的模塊,用來補充mammoth

os: 用來在系統中讀取寫入文件

zipfile: 用來解壓word文檔以提取圖片

json: 用來把數據轉化成json

bson: 用來配置寫入json文件

unicode:用來處理字符

requests:用來調用api

3、轉換單個文件

1.         styleMap = """

2.         p[style-name='Title'] => h2.hide

3.         p[style-name='Subhead 1'] => h4

4.         p[style-name='List Bullet'] => ul.first > li:fresh

5.         p[style-name='List Bullet 2'] => ul.second > li:fresh

6.         p[style-name='Hyperlink']=>a.link

7.         """

8.         def convert_image(image):

9.             return {

10.              "src":""

11.          }

12.       

13.      def parseFile(f):

14.          document = Document(inputPath+f)

15.          article = {"Title":document.core_properties.title,"Content":""}

16.          with open(inputPath+f,"rb") as docFile:

17.              html = mammoth.convert_to_html(docFile,style_map=styleMap,convert_image=mammoth.images.img_element(convert_image))

18.              decoded = unidecode.unidecode(html.value)

19.       

20.       

21.          if not article["Title"]:

22.              for para in document.paragraphs:

23.                  if para.style.name == 'Title':

24.                      if para.text:

25.                          article["Title"] = para.text

26.       

27.          article["Content"]=decoded

28.          return article  

parseFile就是核心功能了。傳遞進來的參數f是文件名,和文件路徑合在一起能夠幫我們準確定位要轉化的文件。首先用docx找到文檔的標題,并創建一個dictionary,里面包含標題和內容。然后用mammoth轉化整個文件。注意命令中要用到stylemapconvertimage。前者用來規定轉化規則:'style-name'word里的式樣名稱,用word打開文檔,點擊任意一個元素可以查看其式樣名稱;這里規定標題轉化為h2,副標題轉化為h3等等。關于列表的轉化規則這里就不詳細敘述了,具體可以參考下面的文章:

參考鏈接

1.         Converting docx to clean HTML: handling the XML structure mismatch

'convert_image' 是用來規定圖片的轉化方式的,由于我準備之后批處理所有文檔中的圖片,在這里就告訴程序不儲存任何圖片信息。但是于此同時保留圖片的img tag以便標注圖片在文檔中的位置。如果不規定任何轉化方式,生成的html里面會包含一大長串base64的圖片信息。

mammoth轉化出來的html是含有unicode的,不知道為什么python里跑一直報錯,就用unicode解碼了一下。

這之后,如果前面的程序沒有抓取到文檔標題,用docx換個姿勢再抓取一下。

最后返回article這個dictionary。

4、抓取圖片

1.         def extractImage(f):

2.             ziped = zipfile.ZipFile(inputPath+f)

3.             allFiles = ziped.namelist()

4.             imgs = filter(lambda x: x.startswith('word/media/'), allFiles)

5.             imgNameArr = []

6.             for img in imgs:

7.                 res = requests.post(guidUrl)

8.                 if res.status_code is 200:

9.                     guid = res.text

10.                  data = ziped.read(img,imgPath)

11.                  idxStr = os.path.basename(img).split(".")[0][-1:]

12.                  imgDict = {}

13.                  imgDict["index"] = int(idxStr)-1

14.                  imgDict["fileName"] = guid+".jpg"

15.                  imgNameArr.append(imgDict)

16.                  targetPath = os.path.join(imgPath,guid+".jpg")

17.                  target = open(targetPath,"wb")

18.                  target.write(data)

19.                  target.close()

20.          ziped.close()

21.          return imgNameArr

沒想到word文檔其實是一個壓縮文件吧?如果直接把word文檔的后綴名改成zip然后再用解壓軟件查看,會看到一個media文件夾,里面就包含所有插入的圖片。

ziped讀取文檔,然后找到存放圖片的media文件夾,每一個圖片重新用guid命名,生成一個dictionary,里面包含的信息有“此圖片在文檔中出現的順序”和文件名。話說media中的圖片都被按照順序重新命名為image1.png, image2.png,剛好為我們抓取順序信息提供了方便。

python也有生成guid的模塊,我在這里調用api有點多此一舉,但是為了和項目中其他圖片需要用到的uuidv4保持一致還是用了)

之后就是把圖片存在‘imgs’這個文件夾下。

5、生成json

1.         def processDocs(path):

2.             result = []

3.             for f in os.listdir(path):

4.                 if not f.startswith('.'):

5.                     imgNameArr = extractImage(f)

6.                     article = parseFile(f)

7.                     fileName = os.path.basename(f)

8.                     contentArr = article["Content"].split("<img")

9.                     for idx, section in enumerate(contentArr):

10.                      for info in imgNameArr:

11.                          if idx is info["index"]:

12.                              contentArr[idx] = section+"<img alt='"+info["fileName"]+"' data-fileName='"+info["fileName"]+"'"

13.       

14.                  article["Content"] = ''.join(contentArr)

15.                  result.append(article)

16.       

17.       

18.          with open(outputFile,'w+') as f:

19.              json.dump(result,f,default=json_util.default)

最后要用到的一個function就是寫個循環挨個處理docfiles文件夾底下的文件了。針對每一個文件,記得把之前生成的圖片信息的數組maphtml里,然后在寫入到json文件里就大功告成了!

indd轉化為html

話說,到現在為止,我還沒有找到一個完美的解決方案。我使用了相同的思路,把indd先批量生成為pdf(有一個indesign 腳本就是專門批量轉化pdf的),然后用了一個叫做layout_scannergithub項目抓取pdf信息并轉化為html。最后生成的html包含了文字和圖片,但是圖標和排版就保存不下來了??蛻舸蟠蟊硎静粷M意。我也很惆悵??!機智的小伙伴們如果有更好的思路請務必告訴我!如果需要我詳細說明一下這一塊內容,我會更新在這篇文章中。

到此,關于“怎么用Python將word文件轉換成html”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女