[英]Xlrd very slow opening excel file
我有一個excel文件,我想它對於excel文件(200Mb)來說是非常大的,大約有20張紙的信息。
我的問題是,以下簡單動作執行將近5分鍾是否正常,這是正常的。 我想知道我是否以正確的方式進行操作。
import xlrd
def processExcel(excelFile):
excelData = xlrd.open_workbook(excelFile)
sheets = excelData.sheet_names()
print sheets
如您所見,在第一步中,我只是嘗試獲取工作表名稱,僅此簡單的操作就需要5分鍾...可能嗎?
是的,這絕對有可能。 確實,Excel文件中包含大量數據。 默認情況下, xlrd
將整個工作簿加載到內存中。 如果您的工作簿是.xls文件,則可以使用on_demand
參數僅在需要時打開工作表:
import xlrd
def processExcel(excelFile):
excelData = xlrd.open_workbook(excelFile, on_demand=True)
sheets = excelData.sheet_names()
print sheets
如果嘗試打開.xlsx文件,則on_demand
參數無效。
更新資料
如果您正在使用Python 3並讀取.xlsx文件,則可以嘗試sxl 。 這是一個僅根據需要將內容讀入內存的庫。 因此,只需打開工作簿以檢索工作表名稱即可。 另外,如果您只需要工作表的前幾行,它也可以很快地獲得它們。
如果需要使用sxl
讀取所有數據,則必須遍歷所有行,這可能甚至比xlrd
慢,但至少只會消耗所需的內存。 例如,以下代碼在任何給定時間將僅在存儲器中保留一行:
from sxl import Workbook
wb = Workbook('MyBigFile.xlsx')
ws = wb.sheets[1]
for row in ws.rows:
print(row)
但是,如果您需要對所有行進行隨機訪問以進行處理,則必須將它們全部保留在內存中:
from sxl import Workbook
wb = Workbook('MyBigFile.xlsx')
ws = wb.sheets[1]
all_rows = list(ws.rows)
在這種情況下, all_rows
將整個工作表保留在內存中。 如果您的工作簿有多個工作表,這可能仍然比xlrd
更有效。 但是,如果您需要將整個工作簿存儲在內存中,則最好還是堅持使用xlrd
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.