簡體   English   中英

Xlrd非常慢的打開Excel文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM