大家可能可能會面臨這個問題:
1.成堆的科學實驗數據需要導入 Excel 進行分析
2.成堆的銷售數據表格等待統計
3.成堆的商品數據等待分析
作為人生苦短的 Python 程序員,該如何優雅地操作 Excel?其實Python提供的操作Excel的庫有7個之多,到底哪個更好使用更加方便呢?首先讓我們來整體把握下不同庫的特點:
1.xlrd是一個從Excel文件讀取數據和格式化信息的庫,支持.xls以及.xlsx文件。官方文檔:http://xlrd.readthedocs.io/en/latest/
2.xlwt是一個用于將數據和格式化信息寫入舊Excel文件的庫(如.xls)。官方文檔:https://xlwt.readthedocs.io/en/latest/
3.xlutils是一個處理Excel文件的庫,依賴于xlrd和xlwt。它僅支持.xls文件的操作。 官方文檔:http://xlutils.readthedocs.io/en/latest/
4.xlwings 簡單強大,使用方便,可替代VBA。xlwings可以支持.xls讀,支持.xlsx文件讀寫。官方文檔:http://docs.xlwings.org/en/stable/index.html
5.XlsxWriter 是一個用來寫 .xlsx 文件格式的模塊,但不能用來讀取和修改 Excel 文件。官方文檔:https://xlsxwriter.readthedocs.io/
6.openpyxl是一個用于讀取和編寫Excel 2010 xlsx/xlsm/xltx/xltm文件的庫。官方文檔:https://openpyxl.readthedocs.io/en/stable/
7.pandas是一個進行數據處理和分析的強大模塊,有時也可以用來自動化處理Excel,官方文檔:http://pandas.pydata.org/
另外還有win32com,通過名字大家就知道離不開windows系統,該庫存在于pywin32中,是一個讀寫和處理Excel文件的庫。但是我的電腦是Mac,就不做展開了。 官方文檔:http://pythonexcels.com/python-excel-mini-cookbook/
DataNitro呢?嚴格來說它是一個Excel 的插件,安裝也需單獨到官網下載。也是僅支持windows系統。 官方文檔:https://datanitro.com/
具體內容大家也可以參看:http://www.python-excel.org
環境配置
安裝
7個模塊均為非標準庫,因此都需要在命令行中 pip/pip3進行安裝:
pip/pip3 install xlrd
pip/pip3 install xlwt
pip/pip3 install xlutils
pip/pip3 install xlwings
pip/pip3 install XlsxWriter
pip/pip3 install openpyxl
pip/pip3 install pandas
提示:
• xlutils 僅支持 xls 文件,即2003以下版本;
• xlwings 安裝成功后,如果運行提示報錯“ImportError: no module named win32api”,請再安裝 pypiwin32 或者 pywin32 包;
模塊導入
模塊的導入跟以往導入其他模塊一樣,使用import進行導入,如果名字比較長還可以使用as起個別名。
import xlrd
import xlwt
import xlwings as xw
import xlsxwriter
import openpyxl
import pandas as pd
xlutils 模塊是 xlrd和 xlwt之間的橋梁,最核心的作用是拷貝一份通過 xlrd 讀取到內存中的 .xls 對象,然后再拷貝對象上通過 xlwt 修改 .xls 表格的內容。xlutils 可以將 xlrd 的 Book 對象復制轉換為xlwt 的Workbook 對象。具體使用時通常導入的是模塊中的copy子模塊:
import xlutils.copy
文檔操作
由于設計模式的不同,導致基本的新建文件、修改文件、保存文件等功能在不同的庫中存在著一定差異,比如xlsxwriter并不支持打開或修改現有文件,xlwings不支持對新建文件的命名等等,但是分析發現xlwings和openpyxl是對excel操作支持最多的兩個庫。
特別要說明一下xlutils庫,xlrd、xlwt、xlutils 各自的功能都有局限性,但三者互為補充,覆蓋了Excel文件尤其是 .xls 文件的操作。xlwt 可以生成 .xls 文件,xlrd 可以讀取已經存在的 .xls文件,xlutils 連接 xlrd 和 xlwt 兩個模塊,使用戶可以同時讀寫一個 .xls 文件。簡單來說,xlrd 負責讀、xlwt 負責寫、xlutils 負責提供輔助和銜接
性能對比
對幾個庫做了最基本的寫入和讀取測試,分別使用不同庫進行添加及讀取 5000行 * 800列 數據操作,得到所用時間,重復操作取平均值。另外在不同的電腦配置,不同的環境下結果肯定會有出入,數據僅供參考。
openpyxl雖然操作Excel的功能強大,但讀寫性能過于糟糕,尤其是寫大表時,會占用大量內存,開啟readonly和writeonly模式后對其性能有大幅提升,尤其是對讀的性能提升很大,使其幾乎不耗時。
pandas把Excel當作數據讀寫的容器,為其強大的數據分析服務,因此讀寫性能表現中規中矩,但其對Excel文件兼容性是最好的,支持讀寫.xls,.xlsx文件,且支持只讀表中單一工作頁。
同樣支持此功能的庫還有xlrd,但xlrd只支持讀,并不支持寫,且性能不突出,需要配合xlutils進行Excel操作。
xlsxwriter功能單一,一般用來創建.xlsx文件,寫入性能中庸。
綜合考慮,xlwings的表現最佳,正如其名,xlwings——Make Excel Fly!
通過以上分析,相信大家對幾個庫都有了簡單的了解。你可根據自己的需求和生產環境,選擇合適的 Python-Excel 模塊
附上一部分常用代碼:
xlwings基本代碼
import xlwings as xw
#連接到excel
workbook = xw.Book('你的excel文件的路徑')#連接excel文件
#連接到指定單元格
data_range = workbook.sheets('Sheet1').range('A1')
#寫入數據
data_range.value = ['a','b','c']
#保存
workbook.save()
xlsxwriter基本代碼
import xlsxwriter as xw
#新建excel
workbook = xw.Workbook('你的excel文件的路徑')
#新建工作薄
worksheet = workbook.add_worksheet()
#寫入數據
worksheet.wirte('A1','a')
#關閉保存
workbook.close()
xlutils基本代碼
import xlrd #讀取數據
import xlwt #寫入數據
import xlutils.copy #操作excel
# 通過xlrd讀取數據
#打開excel文件
workbook = xlrd.open_workbook('你的excel文件的路徑')
#獲取表單
worksheet = workbook.sheet_by_index(0)
#讀取數據
data = worksheet.cell_value(0,0)
# 通過xlwt寫入數據
#新建excel
wb = xlwt.Workbook()
#添加工作薄
sh = wb.add_sheet('Sheet1')
#寫入數據
sh.write(0,0,'abc')
#保存文件
wb.save('myexcel.xls')
#打開excel文件
book = xlrd.open_workbook('你的excel文件的路徑')
#復制一份
new_book = copy(book)
#拿到工作薄
worksheet = new_book.getsheet(0)
#寫入數據
worksheet.write(0,0,'mydata')
#保存
new_book.save()
openpyxl基本代碼
import openpyxl
# 新建文件
workbook = openpyxl.Workbook()
# 寫入文件
sheet = workbook.activesheet['A1']='A1'
# 保存文件
workbook.save('你的excel保存路徑')
本文目的并不是要評出一個最好的庫,僅是從不同角度對不同庫進行對比,希望能夠讓大家了解各個庫所擅長的工作。
只有充分了解不同工具的特點,才能夠在不同的場景下靈活運用不同的方法來高效解決問題!