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

Python實(shí)現(xiàn)批量下載excel表中超鏈接圖片

 更新時(shí)間:2024年11月22日 08:24:21   作者:可能是條咸魚吧  
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)批量下載excel表中超鏈接圖片,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下

背景

導(dǎo)出數(shù)據(jù)到excel,excel數(shù)據(jù)中有圖片鏈接,在excel中沒(méi)法直接看到圖片是什么樣的,需要批量下載圖片的指定文件夾,再進(jìn)行查看,想到了用python生成一個(gè)腳本文件做批量操作,試著寫一下。

數(shù)據(jù)格式

數(shù)據(jù)類型有文本,也有帶圖片鏈接的Json,存在多張圖片的情況,需要做的是批量獲取Json格式數(shù)據(jù)中的pic,并進(jìn)行下載

處理步驟

  • 使用xlrd庫(kù)讀取Excel表格的數(shù)據(jù)
  • 獲取Excel中的sheet,默認(rèn)取第一個(gè)sheet
  • 遍歷sheet中的每一行數(shù)據(jù),判斷是文本還是Json格式數(shù)據(jù)
  • 根據(jù)對(duì)應(yīng)的列,獲取Json中的pic鏈接地址,存到對(duì)應(yīng)的list中
  • 使用requests庫(kù),取出list中的圖片地址進(jìn)行下載
  • 確保文件夾存在,如果不存在則創(chuàng)建

1.xlrd庫(kù)簡(jiǎn)介

xlrd讀取excel表格數(shù)據(jù),支持xls和xlsx格式的excel表格

基本函數(shù)

1.xlrd.open_workbook(filename[, logfile, file_contents, ...]) 打開excel文件

  • filename:需操作的文件名(包括文件路徑和文件名稱);
  • 若filename不存在,則報(bào)錯(cuò)FileNotFoundError;
  • 若filename存在,則返回值為xlrd.book.Book對(duì)象

2.BookObject.sheet_names() 獲取Book對(duì)象中所有sheet名稱,以列表方式顯示

3.BookObject.sheets():獲取所有sheet的對(duì)象,以列表形式顯示 BookObject.sheet_by_index(sheetx):通過(guò)sheet索引獲取所需sheet對(duì)象

  • sheetx為索引值,索引從0開始計(jì)算;
  • 若sheetx超出索引范圍,則報(bào)錯(cuò)IndexError;
  • 若sheetx在索引范圍內(nèi),則返回值為xlrd.sheet.Sheet對(duì)象

4.BookObject.sheet_by_name(sheet_name):通過(guò)sheet名稱獲取所需sheet對(duì)象 - sheet_name為sheet名稱;- 若sheet_name不存在,則報(bào)錯(cuò)xlrd.biffh.XLRDError;- 若sheet_name存在,則返回值為xlrd.sheet.Sheet對(duì)象

5.對(duì)Sheet對(duì)象中的行操作

  • SheetObject.nrows:獲取某sheet中的有效行數(shù)
  • SheetObject.row_values(rowx[, start_colx=0, end_colx=None]):獲取sheet中第rowx+1行從start_colx列到end_colx列的數(shù)據(jù),返回值為列表。
    • 若rowx在索引范圍內(nèi),以列表形式返回?cái)?shù)據(jù);
    • 若rowx不在索引范圍內(nèi),則報(bào)錯(cuò)IndexError
  • SheetObject.row(rowx):獲取sheet中第rowx+1行單元,返回值為列表;
    • 列表每個(gè)值內(nèi)容為: 單元類型:單元數(shù)據(jù)
  • SheetObject.row_slice(rowx[, start_colx=0, end_colx=None]):以切片方式獲取sheet中第rowx+1行從start_colx列到end_colx列的單元,返回值為列表;
    • 列表每個(gè)值內(nèi)容為: 單元類型:單元數(shù)據(jù)
  • SheetObject.row_types(rowx[, start_colx=0, end_colx=None]):獲取sheet中第rowx+1行從start_colx列到end_colx列的單元類型,返回值為array.array類型。
    • 單元類型ctype:empty為0,string為1,number為2,date為3,boolean為4, error為5(左邊為類型,右邊為類型對(duì)應(yīng)的值);
  • SheetObject.row_len(rowx):獲取sheet中第rowx+1行的長(zhǎng)度
    • rowx:行標(biāo),行數(shù)從0開始計(jì)算(0表示第一行), 必填參數(shù);
    • start_colx:起始列,表示從start_colx列開始取值,包括第start_colx的值;
    • end_colx:結(jié)束列,表示到end_colx列結(jié)束取值,不包括第end_colx的值;
    • start_colx默認(rèn)為0,end_colx默認(rèn)為None:表示取整行相關(guān)數(shù)據(jù);
  • SheetObject.get_rows():獲取某一sheet所有行的生成器

6.對(duì)Sheet對(duì)象中的列操作

  • SheetObject.ncols:獲取某sheet中的有效列數(shù)
  • SheetObject.col_values(self, colx[, start_rowx=0, end_rowx=None]):獲取sheet中第colx+1列從start_rowx行到end_rowx行的數(shù)據(jù),返回值為列表。
  • SheetObject.col_slice(colx[, start_rowx=0, end_rowx=None]):以切片方式獲取sheet中第colx+1列從start_rowx行到end_rowx行的數(shù)據(jù),返回值為列表。
    • 列表每個(gè)值內(nèi)容為: 單元類型:單元數(shù)據(jù)
  • SheetObject.col_types(colx[, start_rowx=0, end_rowx=None]):獲取sheet中第colx+1列從start_rowx行到end_rowx行的單元類型,返回值為列表;

7.對(duì)Sheet對(duì)象的單元格執(zhí)行操作

  • ShellObeject.cell(rowx, colx):獲取sheet對(duì)象中第rowx+1行,第colx+1列的單元對(duì)象,返回值為'xlrd.sheet.Cell'類型,返回值的格式為“單元類型:單元值”。
  • ShellObject.cell_value(rowx, colx):獲取sheet對(duì)象中第rowx+1行,第colx+1列的單元數(shù)據(jù),返回值為當(dāng)前值的類型(如float、int、string...);
  • ShellObject.cell_type(rowx, colx):獲取sheet對(duì)象中第rowx+1行,第colx+1列的單元數(shù)據(jù)類型值;
    • 單元類型ctype:empty為0,string為1,number為2,date為3,boolean為4, error為5;

在Python編譯器中安裝xlrd

pip install xlrd

注:高版本的xlrd目前去除了xlsx格式的支持,支持xls格式,目前使用有兩種方式: 1.刪除高版本,重裝xlrd

xlrd.biffh.XLRDError: Excel xlsx file; not supported

pip install xlrd==1.2.0

2.打開xlsx文件,另存為xls格式

2.詳細(xì)代碼

引入相關(guān)庫(kù)

import xlrd
import requests
import json

實(shí)例代碼

讀取excel

read_path = r"xx\xx.xls"  # excel文件路徑
bk = xlrd.open_workbook(read_path)

獲取所有sheet,取第1個(gè)sheet頁(yè),如果有多個(gè)sheet也可以使用sheet_by_name()方法

try:
    sh = bk.sheets()[0]
except:
    print("no sheet in %s" % read_path)

獲取表中的總行數(shù)

def is_json(msg):
    if isinstance(msg, str):  # 判斷是否是字符串
        try:
            json.loads(msg)
        except ValueError:
            return False
        return True
    else:
        return False

由于數(shù)據(jù)存在文本和json格式數(shù)據(jù),需要先進(jìn)行判斷 判斷是否是json格式數(shù)據(jù)

def is_json(msg):
    if isinstance(msg, str):  # 判斷是否是字符串
        try:
            json.loads(msg)
        except ValueError:
            return False
        return True
    else:
        return False

表中第一行有標(biāo)題,需要從第2行開始

for i in range(1, nrows):
    # print("下載第 %d 個(gè)圖片" % i)
    picList = []  # 定義存放圖片的list

    # 讀取C列數(shù)據(jù)
    C_name = sh.cell_value(i, 2)
    print('C_name: ', C_name)

    # 讀取D列數(shù)據(jù)  excel表中存在一行有多個(gè)圖片情況,使用“;”對(duì)數(shù)據(jù)進(jìn)行分隔,分別拿到每一個(gè)json格式數(shù)據(jù)
    D_name = sh.cell_value(i, 3).split(";")
    print('D_name: ', D_name)

    # 循環(huán)獲取所有的json
    for d_value in D_name:
        print('d_value:', d_value)
        if is_json(d_value):# 先對(duì)json進(jìn)行判斷
            picList = json.loads(d_value)['pic'] # 如果是json數(shù)據(jù)就直接取pic里的值
            if len(picList):  # 為空不打印
                print("picList:", picList)
    
        # 循環(huán)取出圖片地址 使用enumerate獲取每個(gè)圖片下標(biāo)
    for j, picUrl in enumerate(picList):
        # 根據(jù)URL下載到本地
        f = requests.get(picUrl)
        # 需要先創(chuàng)建文件夾
        pic_name = r"D:\xxx\Downloads\文件夾\\" + C_name + "_" + str(j + 1) + ".png"  # 構(gòu)造完整文件路徑+名稱
        with open(pic_name, "wb") as code:
            code.write(f.content)

寫在最后

通過(guò)這種方式可以將excel表中的超鏈接圖片批量下載到本地,再使用電腦圖片查看功能直接看到excel數(shù)據(jù)中的圖片。一個(gè)小功能,不一定能滿足更多的使用場(chǎng)景,還要努力學(xué)習(xí)

以上就是Python實(shí)現(xiàn)批量下載excel表中超鏈接圖片的詳細(xì)內(nèi)容,更多關(guān)于Python下載excel超鏈接圖片的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python自動(dòng)化辦公的10個(gè)腳本合集(含源碼)

    Python自動(dòng)化辦公的10個(gè)腳本合集(含源碼)

    這篇文章主要為大家詳細(xì)介紹了Python自動(dòng)化辦公的10個(gè)腳本合集,這些腳本覆蓋郵件、Excel處理、圖片、PDF和歸檔等常見辦公場(chǎng)景,大家可以根據(jù)需要進(jìn)行選擇
    2025-11-11
  • python中讀取txt文件時(shí)split()函數(shù)的妙用

    python中讀取txt文件時(shí)split()函數(shù)的妙用

    這篇文章主要介紹了python中讀取txt文件時(shí)split()函數(shù)的妙用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python使用Altair創(chuàng)建交互式數(shù)據(jù)可視化的操作指南

    Python使用Altair創(chuàng)建交互式數(shù)據(jù)可視化的操作指南

    Altair 是一個(gè)基于 Vega-Lite 的 Python 數(shù)據(jù)可視化庫(kù),它旨在簡(jiǎn)化數(shù)據(jù)可視化的創(chuàng)建過(guò)程,尤其適用于統(tǒng)計(jì)圖表的生成,Altair 強(qiáng)調(diào)聲明式編碼方式,通過(guò)簡(jiǎn)單的語(yǔ)法,用戶能夠快速創(chuàng)建復(fù)雜的交互式圖表,本文將介紹 Altair 的基礎(chǔ)用法、常見圖表類型,需要的朋友可以參考下
    2024-12-12
  • 一文詳細(xì)介紹Python中的OrderedDict對(duì)象

    一文詳細(xì)介紹Python中的OrderedDict對(duì)象

    OrderedDict是Python標(biāo)準(zhǔn)庫(kù)collections模塊的一部分,下面這篇文章主要給大家介紹了關(guān)于Python中OrderedDict對(duì)象的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • NumPy中flatten()函數(shù)的具體使用

    NumPy中flatten()函數(shù)的具體使用

    本文主要介紹了NumPy中flatten()函數(shù)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • python中的隨機(jī)函數(shù)random的用法示例

    python中的隨機(jī)函數(shù)random的用法示例

    這篇文章主要介紹了python中的隨機(jī)函數(shù)random的用法示例,詳細(xì)的介紹了python 隨機(jī)函數(shù)random的用法和示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • (手寫)PCA原理及其Python實(shí)現(xiàn)圖文詳解

    (手寫)PCA原理及其Python實(shí)現(xiàn)圖文詳解

    這篇文章主要介紹了Python來(lái)PCA算法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望能給你帶來(lái)幫助
    2021-08-08
  • python驗(yàn)證碼識(shí)別教程之滑動(dòng)驗(yàn)證碼

    python驗(yàn)證碼識(shí)別教程之滑動(dòng)驗(yàn)證碼

    這篇文章主要給大家介紹了關(guān)于python驗(yàn)證碼識(shí)別教程之滑動(dòng)驗(yàn)證碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • python基于opencv 實(shí)現(xiàn)圖像時(shí)鐘

    python基于opencv 實(shí)現(xiàn)圖像時(shí)鐘

    這篇文章主要介紹了python基于opencv 實(shí)現(xiàn)圖像時(shí)鐘的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • python 實(shí)現(xiàn)任務(wù)管理清單案例

    python 實(shí)現(xiàn)任務(wù)管理清單案例

    這篇文章主要介紹了python 實(shí)現(xiàn)任務(wù)管理清單案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04

最新評(píng)論

临城县| 松江区| 老河口市| 甘洛县| 唐河县| 阿克| 娄底市| 尖扎县| 咸阳市| 宿州市| 贵德县| 万年县| 南川市| 通渭县| 微山县| 许昌市| 曲阜市| 个旧市| 西盟| 康定县| 岑巩县| 郓城县| 玉山县| 鄂温| 金阳县| 枣阳市| 军事| 舟山市| 丹凤县| 沁阳市| 迭部县| 新田县| 离岛区| 佛山市| 昌平区| 五峰| 舒兰市| 理塘县| 台南市| 鹤岗市| 扬中市|