中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Python怎么讀取excel中的圖片功能

發布時間:2022-02-01 14:06:40 來源:億速云 閱讀:1037 作者:iii 欄目:開發技術

這篇文章主要介紹“Python怎么讀取excel中的圖片功能”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python怎么讀取excel中的圖片功能”文章能幫助大家解決問題。

    一、讀取excel文件

    我們先來看看如何讀取excel文件,讀取excel文件的方式很多。這里選擇openpyxl模塊,安裝語句如下:

    pip install openpyxl

    我們還需要用到一些其它模塊,具體如下:

    pip install pyzbar
    pip install pillow
    pip install numpy

    下面我們就可以開始操作了。

    在Excel中,有工作簿、表、單元等。這里簡單說一下,工作簿就是一個excel文件,表的話就是我們excel左下角切換的sheet1、sheet2,單元就是一個格子。下面我們來讀取一個excel文件:

    from openpyxl import load_workbook
    # 加載excel
    wb = load_workbook("111.xlsx")
    # 切換到第一張表
    ws = wb[wb.sheetnames[0]]
    # 獲取A3單元
    cell = ws['A3']
    # 輸出A3單元的值
    print(cell.value)

    二、讀取excel中的圖片

    讀取excel中的圖片有多種方式,本文會分享兩種方式。

    (1)使用zipfile模塊

    excel本身是一個壓縮文件,我們把excel的后綴改成zip后,手動解壓就會看到在xl/media目錄下有一些圖片文件,這些圖片就是excel種插入的圖片。因此我們就可以通過解壓的方式讀取excel種的圖片,具體代碼如下:

    import os
    from zipfile import ZipFile
    # 解壓目錄
    unzip_path = "./unzip"
    if not os.path.exists(unzip_path):
        os.mkdir(unzip_path)
    with ZipFile("111.xlsx") as f:
        for file in f.namelist():
            # 解壓圖片部分的文件
            if file.startswith("xl/media"):
                f.extract(file, path=unzip_path)

    (2)使用openpyxl讀取

    上面的操作可以獲取excel中的圖片,但是有個缺點。就是我們不知道哪個圖片來自哪個單元,在有些情況下知道圖片來自哪個單元是很有比較的。下面我們就來解決這個問題:

    from openpyxl import load_workbook
    wb = load_workbook("111.xlsx")
    ws = wb[wb.sheetnames[0]]
    # 遍歷表中所有托
    for image in ws._images:
        print(image)

    我們先讀取了一個表,然后調用_images獲取表中的所有圖片。但是這個圖片我們還不能操作,具體對圖片的操作我們下一節再看。我們先看看怎么知道圖片來自哪個單元,我們可以輸出圖片的anchor._from:

    from openpyxl import load_workbook
    wb = load_workbook("111.xlsx")
    ws = wb[wb.sheetnames[0]]
    for image in ws._images:
        # 輸出圖片的位置信息
        print(image.anchor._from)

    具體輸入內容如下:

    <openpyxl.drawing.spreadsheet_drawing.AnchorMarker object>
    Parameters:
    col=0, colOff=1, row=0, rowOff=1

    其中col表示行號,row表示列號。根據這些信息,我們就可以知道圖片的單元了。比如col=0,row=0,表示的應該是A1單元。如果col=1,row=1,表示的應該是B2單元。

    三、對讀取的圖片進行處理

    對圖片處理的操作有很多,這里要看具體需要。這里我分享一下把excel中圖片轉換成pillow圖片和ndarray對象的操作。轉換后,我們就可以用numpy和pillow對圖片進行各種操作。

    import numpy as np
    from PIL import Image
    from openpyxl import load_workbook
    wb = load_workbook("111.xlsx")
    ws = wb[wb.sheetnames[0]]
    for image in ws._images:
        # 將圖片轉換成Pillow中的圖片對象
        img = Image.open(image.ref).convert("RGB")
        # 將Pillow中的圖片對象轉換成ndarray數組
        img = np.array(img)

    如果我們excel中的圖片是二維碼,我們就可以進行下面的操作:

    import numpy as np
    from PIL import Image
    from pyzbar import pyzbar
    from openpyxl import load_workbook
    wb = load_workbook("111.xlsx")
    ws = wb[wb.sheetnames[0]]
    for image in ws._images:
        # 轉換成容易操作的圖片對象
        img = Image.open(image.ref).convert("RGB")
        img = np.array(img)
        
        # 解析二維碼
        data = pyzbar.decode(img)
        if data:
            text = data[0].data.decode('utf-8')
            print(text)
        else:
            print("未識別到內容")

    補充

    除了以上的方法,還可以通過以下操作實現:

    1、將待讀取的excel文件后綴名改成zip,變成壓縮文件。

    2、再解壓這個文件。

    3、在解壓后的文件夾中,就有excel中的圖片。

    4、這樣讀excel中的圖片,就變成了讀文件夾中的圖片了,和普通文件一樣,可以做各種處理。

    具體實現代碼

     '''
     File Name:  readexcelimg
     Author:   tim
     Date:    2018/7/26 19:52
     Description: 讀取excel中的圖片,打印圖片路徑
       先將excel轉換成zip包,解壓zip包,包下面有文件夾存放了圖片,讀取這個圖片
     ''' 
     import os
     import zipfile
     # 判斷是否是文件和判斷文件是否存在
     def isfile_exist(file_path):
       if not os.path.isfile(file_path):
         print("It's not a file or no such file exist ! %s" % file_path)
         return False
       else:
         return True
     # 修改指定目錄下的文件類型名,將excel后綴名修改為.zip
     def change_file_name(file_path, new_type='.zip'):
       if not isfile_exist(file_path):
         return ''
       extend = os.path.splitext(file_path)[1] # 獲取文件拓展名
       if extend != '.xlsx' and extend != '.xls':
         print("It's not a excel file! %s" % file_path)
         return False
       file_name = os.path.basename(file_path) # 獲取文件名
       new_name = str(file_name.split('.')[0]) + new_type # 新的文件名,命名為:xxx.zip
       dir_path = os.path.dirname(file_path) # 獲取文件所在目錄
       new_path = os.path.join(dir_path, new_name) # 新的文件路徑
       if os.path.exists(new_path):
         os.remove(new_path)
       os.rename(file_path, new_path) # 保存新文件,舊文件會替換掉
       return new_path # 返回新的文件路徑,壓縮包
     # 解壓文件
     def unzip_file(zipfile_path):
       if not isfile_exist(zipfile_path):
         return False
       if os.path.splitext(zipfile_path)[1] != '.zip':
         print("It's not a zip file! %s" % zipfile_path)
         return False
       file_zip = zipfile.ZipFile(zipfile_path, 'r')
       file_name = os.path.basename(zipfile_path) # 獲取文件名
       zipdir = os.path.join(os.path.dirname(zipfile_path), str(file_name.split('.')[0])) # 獲取文件所在目錄
       for files in file_zip.namelist():
         file_zip.extract(files, os.path.join(zipfile_path, zipdir)) # 解壓到指定文件目錄
       file_zip.close()
       return True
     # 讀取解壓后的文件夾,打印圖片路徑
     def read_img(zipfile_path):
       if not isfile_exist(zipfile_path):
         return False
       dir_path = os.path.dirname(zipfile_path) # 獲取文件所在目錄
       file_name = os.path.basename(zipfile_path) # 獲取文件名
       pic_dir = 'xl' + os.sep + 'media' # excel變成壓縮包后,再解壓,圖片在media目錄
       pic_path = os.path.join(dir_path, str(file_name.split('.')[0]), pic_dir)
       file_list = os.listdir(pic_path)
       for file in file_list:
         filepath = os.path.join(pic_path, file)
         print(filepath)
     # 組合各個函數
     def compenent(excel_file_path):
       zip_file_path = change_file_name(excel_file_path)
       if zip_file_path != '':
         if unzip_file(zip_file_path):
           read_img(zip_file_path)
     # main
     if __name__ == '__main__':
       compenent('/Users/Desktop/test/people.xlsx')

    關于“Python怎么讀取excel中的圖片功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

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

    AI

    彭阳县| 灵台县| 邳州市| 山阳县| 怀仁县| 临夏县| 蕲春县| 黄山市| 呼和浩特市| 洪洞县| 马龙县| 四子王旗| 贵定县| 大同县| 凤庆县| 郯城县| 礼泉县| 射阳县| 常宁市| 册亨县| 高陵县| 塔城市| 西乌| 东乡| 石家庄市| 临武县| 乐至县| 吴川市| 广昌县| 明水县| 阿拉善右旗| 当涂县| 鸡东县| 金秀| 北海市| 巴中市| 安庆市| 同仁县| 泸州市| 海淀区| 蕲春县|