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

Python實(shí)現(xiàn)讀取excel中的圖片功能

 更新時(shí)間:2022年01月28日 12:00:21   作者:ZackSock  
這篇文章主要介紹了如何利用Python實(shí)現(xiàn)讀取Excel中的圖片的功能,文中的實(shí)現(xiàn)步驟講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下

一、讀取excel文件

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

pip install openpyxl

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

pip install pyzbar
pip install pillow
pip install numpy

下面我們就可以開(kāi)始操作了。

在Excel中,有工作簿、表、單元等。這里簡(jiǎn)單說(shuō)一下,工作簿就是一個(gè)excel文件,表的話(huà)就是我們excel左下角切換的sheet1、sheet2,單元就是一個(gè)格子。下面我們來(lái)讀取一個(gè)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)

openpyxl的更多操作可以看看官方的文檔https://openpyxl.readthedocs.io/en/stable/tutorial.html。

二、讀取excel中的圖片

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

(1)使用zipfile模塊

excel本身是一個(gè)壓縮文件,我們把excel的后綴改成zip后,手動(dòng)解壓就會(huì)看到在xl/media目錄下有一些圖片文件,這些圖片就是excel種插入的圖片。因此我們就可以通過(guò)解壓的方式讀取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)

詳細(xì)講解可以參考這篇文章

(2)使用openpyxl讀取

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

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

我們先讀取了一個(gè)表,然后調(diào)用_images獲取表中的所有圖片。但是這個(gè)圖片我們還不能操作,具體對(duì)圖片的操作我們下一節(jié)再看。我們先看看怎么知道圖片來(lái)自哪個(gè)單元,我們可以輸出圖片的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)

具體輸入內(nèi)容如下:

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

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

三、對(duì)讀取的圖片進(jìn)行處理

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

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:
    # 將圖片轉(zhuǎn)換成Pillow中的圖片對(duì)象
    img = Image.open(image.ref).convert("RGB")
    # 將Pillow中的圖片對(duì)象轉(zhuǎn)換成ndarray數(shù)組
    img = np.array(img)

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

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:
    # 轉(zhuǎn)換成容易操作的圖片對(duì)象
    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("未識(shí)別到內(nèi)容")

補(bǔ)充

除了以上的方法,還可以通過(guò)以下操作實(shí)現(xiàn):

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

2、再解壓這個(gè)文件。

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

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

具體實(shí)現(xiàn)代碼

 '''
 File Name:  readexcelimg
 Author:   tim
 Date:    2018/7/26 19:52
 Description: 讀取excel中的圖片,打印圖片路徑
   先將excel轉(zhuǎn)換成zip包,解壓zip包,包下面有文件夾存放了圖片,讀取這個(gè)圖片
 ''' 
 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
 # 修改指定目錄下的文件類(lèi)型名,將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) # 保存新文件,舊文件會(huì)替換掉
   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)
 # 組合各個(gè)函數(shù)
 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')

到此這篇關(guān)于Python實(shí)現(xiàn)讀取excel中的圖片功能的文章就介紹到這了,更多相關(guān)Python讀取excel圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python利用scatter繪畫(huà)散點(diǎn)圖

    python利用scatter繪畫(huà)散點(diǎn)圖

    這篇文章主要介紹了python利用scatter繪畫(huà)散點(diǎn)圖,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-06-06
  • Python 代碼中的 yield 關(guān)鍵字到底是什么

    Python 代碼中的 yield 關(guān)鍵字到底是什么

    yield是Python中一個(gè)強(qiáng)大的工具,它可以幫助你以一種高效的方式處理大量數(shù)據(jù),理解yield的工作原理對(duì)于掌握Python編程至關(guān)重要,這篇文章主要介紹了Python 代碼中的 yield 到底是什么,需要的朋友可以參考下
    2024-07-07
  • python檢測(cè)lvs real server狀態(tài)

    python檢測(cè)lvs real server狀態(tài)

    這篇文章主要介紹了用python檢測(cè)lvs real server狀態(tài)的示例,大家參考使用吧
    2014-01-01
  • pandas 快速處理 date_time 日期格式方法

    pandas 快速處理 date_time 日期格式方法

    今天小編就為大家分享一篇pandas 快速處理 date_time 日期格式方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 教你如何在Django 1.6中正確使用 Signal

    教你如何在Django 1.6中正確使用 Signal

    因?yàn)樾碌膁jango開(kāi)發(fā)人員得知signal之后, 往往會(huì)很高興去使用它. 他們?cè)谀苁褂胹ignal的地方就使用signal, 并且這是他們覺(jué)得自己是django專(zhuān)家一樣. 然而, 像這樣編碼一段時(shí)間后, django項(xiàng)目就會(huì)變得異常復(fù)雜, 許多內(nèi)容都糾結(jié)在一起無(wú)法解開(kāi).
    2014-06-06
  • Python筆記之facade模式

    Python筆記之facade模式

    這篇文章主要為大家詳細(xì)介紹了Python筆記之facade模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 在cmd命令行里進(jìn)入和退出Python程序的方法

    在cmd命令行里進(jìn)入和退出Python程序的方法

    今天小編就為大家分享一篇在cmd命令行里進(jìn)入和退出Python程序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 最新評(píng)論

    当雄县| 永丰县| 兴文县| 阳西县| 和龙市| 汝城县| 黄大仙区| 虎林市| 施甸县| 台湾省| 西藏| 华池县| 克拉玛依市| 东海县| 郁南县| 三原县| 唐海县| 淅川县| 宽城| 手游| 潼南县| 靖宇县| 溧阳市| 海盐县| 阳山县| 临邑县| 汕头市| 耿马| 勃利县| 南部县| 黄大仙区| 罗山县| 福海县| 崇文区| 静海县| 深圳市| 濉溪县| 开原市| 上饶县| 孝感市| 铜陵市|