Python-Excel 模塊哪家強(qiáng)?

前言

從網(wǎng)頁爬下來的大量數(shù)據(jù)需要excel清洗
成堆的科學(xué)實(shí)驗(yàn)數(shù)據(jù)需要導(dǎo)入excel進(jìn)行分析
作為一名面向逼格的Python程序員
該如何合理而又優(yōu)雅的選擇生產(chǎn)力工具呢?

得益于辛勤勞作的python大神們,處理excel已經(jīng)有大量python包,主流代表有:

  • xlwings:簡(jiǎn)單強(qiáng)大,可替代VBA

  • openpyxl:簡(jiǎn)單易用,功能廣泛

  • pandas:使用需要結(jié)合其他庫,數(shù)據(jù)處理是pandas立身之本

  • win32com:不僅僅是excel,可以處理office;

  • Xlsxwriter:豐富多樣的特性,直接創(chuàng)造一份美觀大方的excel,代碼即一切;

  • DataNitro:作為插件內(nèi)嵌到excel中,可替代VBA,在excel中優(yōu)雅的使用python

  • xlutils:結(jié)合xlrd/xlwt,老牌python包,需要注意的是你必須同時(shí)安裝這三個(gè)庫

面對(duì)形形色色的擴(kuò)展包,有時(shí)候會(huì)感到困惑,到底哪個(gè)包才是最適合自己的呢?
本文將從配置環(huán)境、文檔操作、基本功能等方面比較以上擴(kuò)展,讓您能結(jié)合自己的生產(chǎn)環(huán)境,選擇最適合自己的Excel操作庫,同時(shí)自信的對(duì)其他庫:你是個(gè)好擴(kuò)展,可我們不合適!
下面,我們通過多方面的比較,讓您對(duì)這些擴(kuò)展有一個(gè)基礎(chǔ)的了解。


1.環(huán)境配置

再好的模塊,也需要在正確的 Python 版本以及 Excel 版本才可運(yùn)行。

Paste_Image.png

所有庫都支持Python2和python3。
需要注意的是Xlutils僅支持xls文件,即2003以下版本。同時(shí)win32com與DataNitro僅支持windows

2.文檔操作

由于設(shè)計(jì)模式的不同,導(dǎo)致基本的新建文件、修改文件、保存文件等功能在不同的庫中存在著一定差異,比如xlsxwriter并不支持打開或修改現(xiàn)有文件,xlwings不支持對(duì)新建文件的命名等等,DataNitro作為excel插件依托于excel本身的操作。詳見下圖

Paste_Image.png

3.基本功能

由于設(shè)計(jì)目的不同,每個(gè)模塊通常著重于某一方面功能,各有所長(zhǎng)。

xlwings

可結(jié)合 VBA 實(shí)現(xiàn)對(duì) Excel 編程,強(qiáng)大的數(shù)據(jù)輸入分析能力,同時(shí)擁有豐富的接口,結(jié)合 pandas/numpy/matplotlib 輕松應(yīng)對(duì) Excel 數(shù)據(jù)處理工作。

openpyxl

簡(jiǎn)單易用,功能廣泛,單元格格式/圖片/表格/公式/篩選/批注/文件保護(hù)等等功能應(yīng)有盡有,圖表功能是其一大亮點(diǎn),缺點(diǎn)是對(duì) VBA 支持的不夠好。

pandas

數(shù)據(jù)處理是 pandas 的立身之本,Excel 作為 pandas 輸入/輸出數(shù)據(jù)的容器。

win32com

從命名上就可以看出,這是一個(gè)處理 windows 應(yīng)用的擴(kuò)展,Excel 只是該庫能實(shí)現(xiàn)的一小部分功能。該庫還支持 office 的眾多操作。需要注意的是,該庫不單獨(dú)存在,可通過安裝 pypiwin32 或者 pywin32 獲取。

xlsxwriter

擁有豐富的特性,支持圖片/表格/圖表/篩選/格式/公式等,功能與openpyxl相似,優(yōu)點(diǎn)是相比 openpyxl 還支持 VBA 文件導(dǎo)入,迷你圖等功能,缺點(diǎn)是不能打開/修改已有文件,意味著使用 xlsxwriter 需要從零開始。

DataNitro

作為插件內(nèi)嵌到 Excel 中,可完全替代 VBA,在 Excel 中使用 python 腳本。既然被稱為 Excel 中的 python,協(xié)同其他 python 庫亦是小事一樁。然而,這是付費(fèi)插件...

xlutils

基于 xlrd/xlwt,老牌 python 包,算是該領(lǐng)域的先驅(qū),功能特點(diǎn)中規(guī)中矩,比較大的缺點(diǎn)是僅支持 xls 文件。

4.性能

我們對(duì)幾個(gè)庫做了最基本的寫入和讀取測(cè)試,分別使用不同庫進(jìn)行添加及讀取 1000行 * 700列 數(shù)據(jù)操作,得到所用時(shí)間,重復(fù)操作取平均值。另外在不同的電腦配置,不同的環(huán)境下結(jié)果肯定會(huì)有出入,數(shù)據(jù)僅供參考。

Paste_Image.png

5.小結(jié)

通過以上的分析,相信大家對(duì)幾個(gè)庫都有了簡(jiǎn)單的了解。在編寫文章的過程中,筆者也在思考各個(gè)庫最適合的應(yīng)用場(chǎng)景。

  1. 不想使用 GUI 而又希望賦予 Excel 更多的功能,openpyxl 與 xlsxwriter,你可二者選其一;
  2. 需要進(jìn)行科學(xué)計(jì)算,處理大量數(shù)據(jù),建議 pandas+xlsxwriter 或者 pandas+openpyxl;
  3. 想要寫 Excel 腳本,會(huì) Python 但不會(huì) VBA 的同學(xué),可考慮 xlwings 或 DataNitro;
  4. 至于 win32com,不管是功能還是性能都很強(qiáng)大,有 windows 編程經(jīng)驗(yàn)的同學(xué)可以使用。不過它相當(dāng)于是 windows COM 的封裝,自身并沒有很完善的文檔,新手使用起來略有些痛苦。

你可根據(jù)自己的需求和生產(chǎn)環(huán)境,選擇合適的 Python-Excel 模塊。


6.代碼

6.1 xlwings基本代碼

import xlwings as xw

#連接到excel
workbook = xw.Book(r'path/myexcel.xlsx')#連接excel文件
#連接到指定單元格
data_range = workbook.sheets('Sheet1').range('A1')
#寫入數(shù)據(jù)
data_range.value = [1,2,3]
#保存
workbook.save()

6.2 xlsxwriter基本代碼

import xlsxwriter as xw
#新建excel
workbook  = xw.Workbook('myexcel.xlsx')
#新建工作薄
worksheet = workbook.add_worksheet()
#寫入數(shù)據(jù)
worksheet.wirte('A1',1)
#關(guān)閉保存
workbook.close()

6.3 xlutils基本代碼

import xlrd #讀取數(shù)據(jù)
import xlwt #寫入數(shù)據(jù)
import xlutils #操作excel
-----#xlrd庫
#打開excel文件
workbook = xlrd.open_workbook('myexcel.xls')
#獲取表單
worksheet = workbook.sheet_by_index(0)
#讀取數(shù)據(jù)
data = worksheet.cell_value(0,0)
----#xlwt庫
#新建excel
wb = xlwt.Workbook()
#添加工作薄
sh = wb.add_sheet('Sheet1')
#寫入數(shù)據(jù)
sh.write(0,0,'data')
#保存文件
wb.save('myexcel.xls')
-----#xlutils庫
#打開excel文件
book = xlrd.open_workbook('myexcel.xls')
#復(fù)制一份
new_book = xlutils.copy(book)
#拿到工作薄
worksheet = new_book.getsheet(0)
#寫入數(shù)據(jù)
worksheet.write(0,0,'new data')
#保存
new_book.save()

6.4 win32com基本代碼

import win32com.client as wc
#啟動(dòng)Excel應(yīng)用
excel_app = wc.Dispatch('Excel.Application')
#連接excel
workbook = excel_app.Workbooks.Open(r'e:/myexcel.xlsx' )
#寫入數(shù)據(jù)
workbook.Worksheets('Sheet1').Cells(1,1).Value = 'data'
#關(guān)閉并保存
workbook.SaveAs('newexcel.xlsx')
excel_app.Application.Quit()

6.5 openpyxl基本代碼

 import openpyxl
 # 新建文件
 workbook = openpyxl.Workbook() 
 # 寫入文件
 sheet = workbook.activesheet['A1']='A1'
 # 保存文件 
 workbook.save('test.xlsx')

歡迎加入 Crossin的編程教室
crossincode.com
新手入門QQ群:522415386
微信請(qǐng)加 crossin11 留言入群(新手/進(jìn)階)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容