中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

運行較大excel文件openpyxl變慢怎么辦

發布時間:2020-10-28 09:35:27 來源:億速云 閱讀:246 作者:小新 欄目:編程語言

這篇文章主要介紹了運行較大excel文件openpyxl變慢怎么辦,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

運行以下代碼:

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變慢怎么辦內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

额济纳旗| 五大连池市| 米林县| 临汾市| 新乐市| 疏附县| 鹤山市| 哈巴河县| 吴江市| 任丘市| 龙陵县| 准格尔旗| 南城县| 长子县| 浦城县| 南雄市| 蓬安县| 镇康县| 措勤县| 巫山县| 平舆县| 咸宁市| 原阳县| 德州市| 从化市| 明溪县| 武冈市| 新余市| 元江| 梁平县| 方正县| 壶关县| 酉阳| 罗山县| 汉阴县| 丽水市| 湘阴县| 高陵县| 容城县| 林州市| 安乡县|