這篇文章主要介紹了運行較大excel文件openpyxl變慢怎么辦,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
成都創新互聯主營古丈網站建設的網絡公司,主營網站建設方案,成都app開發,古丈h5小程序開發搭建,古丈網站營銷推廣歡迎古丈等地區企業咨詢運行以下代碼:
from openpyxl import Workbook from openpyxl.utils import get_column_letter from openpyxl import load_workbook import time wb = load_workbook("E:/a.xlsx", read_only=True) sh = wb["Sheet"] # rowItem = {} # for j in range(1,2000): # for i in range(1, 30): # rowItem[get_column_letter(i)] = i # sh.append(rowItem) # wb.save("E:/a.xlsx") t0 = time.time() print(sh['V500'].value) t1 = time.time() print("openpyxl所用時間:", str(t1-t0)) import xlrd xlsPath = "E:/a.xlsx" WorkBook = xlrd.open_workbook(xlsPath) sh = WorkBook.sheet_by_name("Sheet") t0 = time.time() print(sh.cell(499,22).value) t1 = time.time() print("xlrd所用時間:", str(t1-t0))
測試結果:
22 openpyxl所用時間: 0.44217610359191895 23.0 xlrd所用時間: 0.0010063648223876953
結論
openpyxl的慢是讀取慢,可以選擇xlrd代替,詳細測試下面繼續。
不直接使用xlwt+xlrd是因為xlwt僅支持2003及以下版本,大行數限制在65536,不夠用,而openpyxl大概在一百多萬。
主要的說完了,下面詳細說了:在寫工具的時候遇到的這個問題,開始是用的xlwt+xlrd,然后行數超標了,沒辦法換成openpyxl使用excel2007的版本,原本測試不到三萬行的數據,只要三四秒,換成openpyxl以后,花了好幾分鐘,具體沒看多少了,然后加上函數運行時間的監視器以后,才看到是讀取的時候出的問題。
推測原因:
推測的話,openpyxl的根據行號列號讀取的時候,是從第一行第一列開始遍歷,直到行號等于指定行號,列號等于指定列號,所以要讀取的行號列號越多就越慢,(也可能是從第一個有數據的行或列),而xlrd則是類似與數組一樣,我們要取第幾個元素,直接根據下標找到內存中對應地址的元素即可,所以無論excel總量多少,速度基本都是不變的。
知識拓展:
xlwt寫入僅支持65536行,那xlrd的讀取很可能也是,也就是超過這么多的數據可能也會出錯。
我這里因為是讀多表數據生成單表數據,生成方式大概是Na*Nb這樣,所以實際讀取的不會太多,但生成的很多,所以基本可以用考慮這個問題。
另外,據說xlrd讀取xlsx格式的偶爾會出現問題,具體沒測試,暫時用還沒毛病。
最后,順帶上一下監控函數運行時間的裝飾器吧:
import time from functools import wraps def fn_timer(function): @wraps(function) def function_timer(*args, **kwargs): t0 = time.time() result = function(*args, **kwargs) t1 = time.time() print ("Total time running %s: %s seconds" % (function.__name__, str(t1-t0)) ) return result return function_timer
使用方式的話,就是在要監控的函數定義上面加上 @fn_timer 就行了。
感謝你能夠認真閱讀完這篇文章,希望小編分享運行較大excel文件openpyxl變慢怎么辦內容對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯-成都網站建設公司行業資訊頻道,遇到問題就找創新互聯,詳細的解決方法等著你來學習!
新聞名稱:運行較大excel文件openpyxl變慢怎么辦-創新互聯
路徑分享:http://vcdvsql.cn/article14/phige.html
成都網站建設公司_創新互聯,為您提供動態網站、移動網站建設、電子商務、網站制作、外貿網站建設、外貿建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯