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

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

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

背景

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

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

數(shù)據(jù)類(lèi)型有文本,也有帶圖片鏈接的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, ...]) 打開(kāi)excel文件

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

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

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

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

4.BookObject.sheet_by_name(sheet_name):通過(guò)sheet名稱(chēng)獲取所需sheet對(duì)象 - sheet_name為sheet名稱(chēng);- 若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)容為: 單元類(lèi)型:單元數(shù)據(jù)
  • SheetObject.row_slice(rowx[, start_colx=0, end_colx=None]):以切片方式獲取sheet中第rowx+1行從start_colx列到end_colx列的單元,返回值為列表;
    • 列表每個(gè)值內(nèi)容為: 單元類(lèi)型:單元數(shù)據(jù)
  • SheetObject.row_types(rowx[, start_colx=0, end_colx=None]):獲取sheet中第rowx+1行從start_colx列到end_colx列的單元類(lèi)型,返回值為array.array類(lèi)型。
    • 單元類(lèi)型ctype:empty為0,string為1,number為2,date為3,boolean為4, error為5(左邊為類(lèi)型,右邊為類(lèi)型對(duì)應(yīng)的值);
  • SheetObject.row_len(rowx):獲取sheet中第rowx+1行的長(zhǎng)度
    • rowx:行標(biāo),行數(shù)從0開(kāi)始計(jì)算(0表示第一行), 必填參數(shù);
    • start_colx:起始列,表示從start_colx列開(kāi)始取值,包括第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)容為: 單元類(lèi)型:單元數(shù)據(jù)
  • SheetObject.col_types(colx[, start_rowx=0, end_rowx=None]):獲取sheet中第colx+1列從start_rowx行到end_rowx行的單元類(lèi)型,返回值為列表;

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

  • ShellObeject.cell(rowx, colx):獲取sheet對(duì)象中第rowx+1行,第colx+1列的單元對(duì)象,返回值為'xlrd.sheet.Cell'類(lèi)型,返回值的格式為“單元類(lèi)型:單元值”。
  • ShellObject.cell_value(rowx, colx):獲取sheet對(duì)象中第rowx+1行,第colx+1列的單元數(shù)據(jù),返回值為當(dāng)前值的類(lèi)型(如float、int、string...);
  • ShellObject.cell_type(rowx, colx):獲取sheet對(duì)象中第rowx+1行,第colx+1列的單元數(shù)據(jù)類(lèi)型值;
    • 單元類(lèi)型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.打開(kāi)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行開(kāi)始

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)造完整文件路徑+名稱(chēng)
        with open(pic_name, "wb") as code:
            code.write(f.content)

寫(xiě)在最后

通過(guò)這種方式可以將excel表中的超鏈接圖片批量下載到本地,再使用電腦圖片查看功能直接看到excel數(shù)據(jù)中的圖片。一個(gè)小功能,不一定能滿(mǎn)足更多的使用場(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中RegEx在數(shù)據(jù)處理中的應(yīng)用

    詳解Python中RegEx在數(shù)據(jù)處理中的應(yīng)用

    正則表達(dá)式(Regular?Expressions,簡(jiǎn)稱(chēng)?RegEx)是一種強(qiáng)大的文本匹配和搜索工具,它在數(shù)據(jù)處理、文本解析和字符串操作中發(fā)揮著關(guān)鍵作用,下面就跟隨小編一起來(lái)了解一下RegEx的具體使用吧
    2024-01-01
  • Django設(shè)置Postgresql的操作

    Django設(shè)置Postgresql的操作

    這篇文章主要介紹了Django設(shè)置Postgresql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python?random模塊常用函數(shù)基礎(chǔ)教程

    python?random模塊常用函數(shù)基礎(chǔ)教程

    這篇文章主要為大家介紹了python?random模塊常用函數(shù)基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • python通過(guò)函數(shù)屬性實(shí)現(xiàn)全局變量的方法

    python通過(guò)函數(shù)屬性實(shí)現(xiàn)全局變量的方法

    這篇文章主要介紹了python通過(guò)函數(shù)屬性實(shí)現(xiàn)全局變量的方法,實(shí)例分析了Python中函數(shù)屬性的相關(guān)使用技巧,需要的朋友可以參考下
    2015-05-05
  • python 實(shí)現(xiàn)插入排序算法

    python 實(shí)現(xiàn)插入排序算法

    python 插入排序算法,需要的朋友可以參考下
    2012-06-06
  • Python學(xué)習(xí)之集合的常用方法總結(jié)

    Python學(xué)習(xí)之集合的常用方法總結(jié)

    集合并不是一種數(shù)據(jù)處理類(lèi)型,而是一種中間類(lèi)型。集合(set)是一個(gè)無(wú)序、不重復(fù)的元素序列,經(jīng)常被用來(lái)處理兩個(gè)列表進(jìn)行交并差的處理性。本文將詳細(xì)講解集合的一些常用方法,感興趣的可以了解一下
    2022-03-03
  • 程序員寫(xiě)Python時(shí)的5個(gè)壞習(xí)慣,你有幾條?

    程序員寫(xiě)Python時(shí)的5個(gè)壞習(xí)慣,你有幾條?

    這篇文章主要介紹了程序員寫(xiě)Python時(shí)的5個(gè)壞習(xí)慣,你有幾條?有的習(xí)慣會(huì)讓 Bug 變得隱蔽難以追蹤,當(dāng)然,也有的并沒(méi)有錯(cuò)誤,只是個(gè)人覺(jué)得不夠優(yōu)雅。本文有示例代碼,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • Python中的單例模式與反射機(jī)制詳解

    Python中的單例模式與反射機(jī)制詳解

    這篇文章主要為大家介紹了Python中的單例模式與反射機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • 詳解python中requirements.txt的一切

    詳解python中requirements.txt的一切

    最近學(xué)習(xí)到了python中的requirements.txt,或許是因?yàn)樘?jiǎn)單了,網(wǎng)上沒(méi)有搜到比較完整的介紹,所以這篇文章主要介紹了關(guān)于python中requirements.txt的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • python制作爬蟲(chóng)爬取京東商品評(píng)論教程

    python制作爬蟲(chóng)爬取京東商品評(píng)論教程

    本文是繼前2篇Python爬蟲(chóng)系列文章的后續(xù)篇,給大家介紹的是如何使用Python爬取京東商品評(píng)論信息的方法,并根據(jù)數(shù)據(jù)繪制成各種統(tǒng)計(jì)圖表,非常的細(xì)致,有需要的小伙伴可以參考下
    2016-12-12

最新評(píng)論