<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python處理Excel的另一個(gè)庫(kù)-openpyxl

          共 2666字,需瀏覽 6分鐘

           ·

          2020-01-06 23:20

          咪哥雜談


          8dc3198948536bcfa5073375ea7033df.webp

          本篇閱讀時(shí)間約為 5 分鐘。


          1

          前言


          上篇文章中,介紹了如何使用 Pandas 來(lái)操作處理 Excel 和 Csv 文件。其中留下了一個(gè)點(diǎn),即圖片頭像現(xiàn)在在 Excel 中依然是地址,現(xiàn)在需要將地址轉(zhuǎn)為圖片,寫入到 Excel。


          今天來(lái)介紹另一個(gè)好用的庫(kù) openpyxl ,Python操作處理 Excel 的神庫(kù)。


          回顧上篇文章詳見(jiàn):Python處理Excel&CSV文件



          2

          環(huán)境準(zhǔn)備


          開(kāi)始之前,需要安裝的第三方庫(kù)有兩個(gè):


          pip install openpyxlpip install pillow


          第一個(gè)是操作 Excel 的,第二個(gè)則是和圖片相關(guān)的庫(kù),早期的文章用到過(guò)。

          3

          代碼演示


          由于使用?openpyxl 庫(kù),每個(gè)操作都可以抽象成一個(gè)方法,所以我將大部分常用的操作封裝成了一個(gè)類來(lái)使用。
          下面來(lái)簡(jiǎn)單介紹下我完成這次圖片寫入用到的功能,完整代碼文末提供地址:
          1. 初始化時(shí)加載,讀和寫的操作對(duì)象

          class Excel(object):    def __init__(self, file):        self.file = file        self.wb = load_workbook(self.file)  # 加載,可讀        sheets = self.wb.sheetnames  # 獲取所有sheet頁(yè)        self.sheet = sheets[0]  # 默認(rèn)第一sheet頁(yè)        self.ws = self.wb[self.sheet]  # 切換到sheet頁(yè)

          self.wb 是讀 Excel 時(shí)用到的,self.ws 則是寫入時(shí)用到的。


          2. 獲取某列的所有值


          由于我需要讀取頭像圖片地址,所以就得需要這一列的地址:


          e610ec4a5d819a1efc4df726a8ebf5c1.webp


          class Excel(object):    # 獲取某列的所有值    def get_col_values(self, column):        rows = self.ws.max_row        column_data = []        for i in range(1, rows + 1):            cell_value = self.ws.cell(row=i, column=column).value            column_data.append(cell_value)        return column_data

          注意,這里的 column 是從 1?開(kāi)始的Excel 中 A 列意味著 column 等于 1,所以傳值的時(shí)候注意列數(shù)的數(shù)字。

          3. 重塑圖片大小,重新寫入文件,設(shè)置行高列高。


          重塑圖片,用到了 pillow 庫(kù),把本地的圖片大小規(guī)劃為 75 像素的寬高。
          重新定義圖片大小是為了整齊,從網(wǎng)站下載下來(lái)的圖片大小不一。


          from PIL import Image as PILImageimg= PILImage.open(img_path)image = img.resize((75, 75), PILImage.ANTIALIAS)  # 重構(gòu)圖片大小,設(shè)置為 75 像素image.save(img_path)


          定義單元格行高:


           class Excel(object):    # 設(shè)置單元格寬度和高度    def set_cell_height(self, row, col, row_height, column_weight):        self.ws.row_dimensions[row].height = row_height        self.ws.column_dimensions[col].width = column_weight

          4.?設(shè)置某列的值


          通過(guò) requests 庫(kù)讀取到圖片,落地,再次設(shè)置圖片。


          ef5bc8fad0ebafd11d73980501cd067c.webp


          classExcel(object):    # 設(shè)置某個(gè)單元格的值    def set_cell_value(self, row, column, cell_value):        try:            if isinstance(cell_value, Image):                self.ws.add_image(cell_value, f'{row}{column}')            else:                self.ws.cell(row=row, column=column).value = cell_value        except Exception as e:            self.ws.cell(row=row, column=column).value = "None"


          5. 保存文件


          為了靈活性,如果你使用此方法傳進(jìn)名字,則新創(chuàng)建文件,否則保存覆蓋之前加載的文件。


          class?Excel(object):    # 保存文件    def save_file(self, file_name=None):        if file_name:            self.wb.save(file_name)        else:            self.wb.save(self.file)


          可以看到這樣是不是就很整齊了呢?


          146185b04901e6db09777162da8435fe.webp


          4

          使用對(duì)比pandas庫(kù)處理Excel


          通過(guò)這兩篇文章比較,個(gè)人覺(jué)得還是 pandas 庫(kù)操作數(shù)據(jù)方便些。但不同場(chǎng)景下使用也不同。


          比如我要寫入圖片,可能 pandas 支持就不那么好,但比如我想合并多個(gè) Excel ,那無(wú)疑使用 pandas 的?concat??數(shù)要簡(jiǎn)單的多。


          可以說(shuō),openpyxl 庫(kù)更多地是對(duì) Excel 細(xì)節(jié)操作的實(shí)現(xiàn),而 Pandas?多數(shù)注重于數(shù)據(jù)的處理,大家根據(jù)自己的場(chǎng)景需求選擇使用就好~


          5

          總結(jié)


          到這里,對(duì)于王者榮耀的相關(guān)數(shù)據(jù)以及 Excel 算是處理完了,下面就準(zhǔn)備分析分析了,看看能從這批數(shù)據(jù)中看到些什么。
          有想看這章完整代碼的朋友,可以后臺(tái)回復(fù)?最終王者 即可獲得。


          題圖 :


          Tirachard Kumtanom -?pexels



          ▼往期精彩回顧▼Python處理Excel&CSV文件pyspider爬取王者榮耀數(shù)據(jù)(上)
          pyspider爬取王者榮耀數(shù)據(jù)(下)



          11f5b18c847e4cdc56957f98d8c9a1a3.webp你點(diǎn)的每個(gè)在看,我都認(rèn)真當(dāng)成了喜歡


          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人操人碰| 日本无套内射 | 伊人网址 | 午夜一区二区三区免费视频 | 欧洲色图亚洲色图 |