欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python提取word文件中的圖片并上傳阿里云OSS

 更新時(shí)間:2021年12月22日 15:51:20   作者:夢想橡皮擦  
這篇文章主要介紹了通過Python提取Word文件中的所有圖片,并將其上傳至阿里云OSS。文中的示例代碼對(duì)學(xué)習(xí)Python有一定的幫助,快跟隨小編一起學(xué)習(xí)一下吧

該需求是一個(gè)真實(shí)的實(shí)戰(zhàn)需求,如果你的公司在做題庫類的系統(tǒng),一定會(huì)涉及該方面的內(nèi)容,所以收藏起來吧。

需求簡單描述如下所示:

1.提取 Word(為了便于解決,統(tǒng)一格式為 docx)中的題干/選項(xiàng)圖片;

2.將其傳遞到云 OSS 上,并返回圖片地址;

3.部分場景,需要將其拼接為 HTML 的 img 標(biāo)簽進(jìn)行返回。

實(shí)操環(huán)節(jié)

首先你需要準(zhǔn)備好云OSS的 AccessKeyId 和 AccessKeySecret ,這兩個(gè)值一般由運(yùn)維工程師提供給你,如果你的公司比較小,沒有運(yùn)維崗位,那就需要自己去申請(qǐng)并進(jìn)行配置啦。

云 OSS 的購買和設(shè)置的流程非常簡單,創(chuàng)建一個(gè) Bucket 之后,就可以使用了。

然后點(diǎn)擊創(chuàng)建好的 Bucket ,進(jìn)行權(quán)限設(shè)置,選擇公共讀即可。

接下來在 Python 文件中編寫如下代碼,并測試是否可以返回 Bucket 對(duì)象,下述的字符串一定要寫準(zhǔn)確,任意內(nèi)容錯(cuò)誤都會(huì)報(bào)錯(cuò),導(dǎo)致 oss 無法鏈接。

AccessKeyId = '你的 AccessKeyId'
AccessKeySecret = '你的 AccessKeySecret'
oos_auth = oss2.Auth(AccessKeyId, AccessKeySecret)
endpoint = 'http://oss-cn-beijing.aliyuncs.com'

bucket = oss2.Bucket(oos_auth, endpoint, 'Bucket 名稱')  
print(bucket)

上述字符串的值,可以在云 OSS 的概覽中找到,如下圖所示。

接下來就進(jìn)入 Word 圖片的環(huán)節(jié),讀取文件依舊使用第三方模塊, python-docx 。

在正式開始前,需要準(zhǔn)備好一個(gè)測試用的 Word 文檔,可以參考下圖設(shè)置 Word 文檔的內(nèi)容。

首先通過 python-docx 讀取文檔中的所有行 paragraphs ,使用如下代碼:

import oss2
import time

from docx import Document

def get_questions():
    document = Document(docx='測試 Word 文檔.docx')
    for p in document.paragraphs:
        print(p.text)

if __name__ == '__main__':
    get_questions()

上述代碼重點(diǎn)為 document.paragraphs ,調(diào)用該屬性將逐段落返回文檔內(nèi)容,然后再通過對(duì)象的 .text 屬性,輸出里面的文字。

此時(shí)的代碼無法獲取到段落中的圖片,可以使用下述代碼進(jìn)行提取。

import oss2
import time

from docx import Document

# 獲取 Word 文檔中的圖片
def get_picture(document, paragraph):
    img = paragraph._element.xpath('.//pic:pic')
    if not img:
        return
    img = img[0]
    embed = img.xpath('.//a:blip/@r:embed')[0]
    related_part = document.part.related_parts[embed]
    image = related_part.image
    return image

def get_questions():
    document = Document(docx='測試 Word 文檔.docx')

    for p in document.paragraphs:
    	# 讀取圖片
        img = get_picture(document, p)

        print(img)
        if img is not None:
        	# 輸出圖片名
            print(img.filename)
            # 輸出圖片后綴
            print(img.ext)
            # 輸出圖片的二進(jìn)制流
        	# print(img.blob)
        print(p.text)

if __name__ == '__main__':
    get_questions()

在上述代碼中,最重要的函數(shù)為 get_picture() 函數(shù),核心邏輯是由于 docx 文檔是一種 xml 結(jié)構(gòu),通過 paragraph._element.xpath() 方法可以進(jìn)行數(shù)據(jù)提取。

讀取數(shù)據(jù)的結(jié)果如下所示:

在上文的注釋中,還存在一個(gè)圖片屬性 img.blob ,即讀取圖片的二進(jìn)制流。

拿該文件流即可寫入云 OSS,然后拼接圖片的訪問路徑,最后將其拼接到 img 標(biāo)簽中即可。

import oss2
import time

from docx import Document

# 獲取 Word 文檔中的圖片
def get_picture(document, paragraph):
    img = paragraph._element.xpath('.//pic:pic')
    if not img:
        return
    img = img[0]
    embed = img.xpath('.//a:blip/@r:embed')[0]
    related_part = document.part.related_parts[embed]
    image = related_part.image
    return image

def ret_up_imgurl(image):
    blob = image.blob
    # 后綴
    ext = image.ext

    AccessKeyId = '你的 AccessKeyId'
    AccessKeySecret = '你的 AccessKeySecret '
    oos_auth = oss2.Auth(AccessKeyId, AccessKeySecret)
    endpoint = 'http://oss-cn-beijing.aliyuncs.com'

    bucket = oss2.Bucket(oos_auth, endpoint, 'Bucket 名稱')  

    base_file_url = 'https://Bucket 名稱.oss-cn-beijing.aliyuncs.com/'
    # 獲取一個(gè)文件名
    file_name = str(int(time.time())) + "." + ext
    # 上傳二進(jìn)制流
    res = bucket.put_object(file_name, blob)
    if res.status == 200:
    	# 返回標(biāo)簽
        img_format = '<img src="{}" />'
        return img_format.format(base_file_url + file_name)
    else:
        return False

def get_questions():
    document = Document(docx='測試 Word 文檔.docx')

    for p in document.paragraphs:
        print(p.text)
        img = get_picture(document, p)

        print(img)
        if img is not None:
            print(img.filename)
            print(img.ext)
            ret_up_imgurl(img.blob)

if __name__ == '__main__':
    get_questions()

上述代碼重點(diǎn)部分在 bucket.put_object(file_name, blob) ,該方法將圖片二進(jìn)制流傳遞到OSS空間。?

到此這篇關(guān)于python提取word文件中的圖片并上傳阿里云OSS的文章就介紹到這了,更多相關(guān)python提取word文件中的圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pycharm運(yùn)行和調(diào)試不顯示結(jié)果的解決方法

    pycharm運(yùn)行和調(diào)試不顯示結(jié)果的解決方法

    今天小編就為大家分享一篇pycharm運(yùn)行和調(diào)試不顯示結(jié)果的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 使用LibTorch進(jìn)行C++調(diào)用pytorch模型方式

    使用LibTorch進(jìn)行C++調(diào)用pytorch模型方式

    這篇文章主要介紹了使用LibTorch進(jìn)行C++調(diào)用pytorch模型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 火遍全網(wǎng)的Python二次元特效輕松掌握

    火遍全網(wǎng)的Python二次元特效輕松掌握

    本篇文章介紹了用python編寫的二次元特效變化小程序,詳細(xì)介紹了整個(gè)思路和過程以及代碼,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Django集成MongoDB實(shí)現(xiàn)過程解析

    Django集成MongoDB實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Django集成MongoDB實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • tesserocr與pytesseract模塊的使用方法解析

    tesserocr與pytesseract模塊的使用方法解析

    這篇文章主要介紹了tesserocr與pytesseract模塊的使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python 打印直角三角形,等邊三角形,菱形,正方形的代碼

    python 打印直角三角形,等邊三角形,菱形,正方形的代碼

    這篇文章主要介紹了python 打印直角三角形,等邊三角形,菱形,正方形的代碼,需要的朋友可以參考下
    2017-11-11
  • Django + Uwsgi + Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署的方法

    Django + Uwsgi + Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署的方法

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比較常見的一種方式。這篇文章主要介紹了Django + Uwsgi + Nginx 實(shí)現(xiàn)生產(chǎn)環(huán)境部署,感興趣的小伙伴們可以參考一下
    2018-06-06
  • tensorflow學(xué)習(xí)教程之文本分類詳析

    tensorflow學(xué)習(xí)教程之文本分類詳析

    初學(xué)tensorflow,借鑒了很多別人的經(jīng)驗(yàn),參考博客對(duì)評(píng)論分類(感謝博主的一系列好文),本人也嘗試著實(shí)現(xiàn)了對(duì)文本數(shù)據(jù)的分類,下面這篇文章主要給大家介紹了關(guān)于tensorflow學(xué)習(xí)教程之文本分類的相關(guān)資料,需要的朋友可以參考下
    2018-08-08
  • Python模擬登陸實(shí)現(xiàn)代碼

    Python模擬登陸實(shí)現(xiàn)代碼

    本篇文章主要介紹了Python模擬登陸實(shí)現(xiàn)代碼,這里整理了詳細(xì)的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • python自動(dòng)生成model文件過程詳解

    python自動(dòng)生成model文件過程詳解

    這篇文章主要介紹了python自動(dòng)生成model文件過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值
    2019-11-11

最新評(píng)論