2016-07-05 97 views
-2

我有一個大的xlsx Excel文件(56MB,550k行),我試圖從中讀取前10行。我嘗試使用xlrd,openpyxlpyexcel-xlsx,但是它們總是花費超過35分鐘,因爲它將整個文件加載到內存中。在python中處理大型XLSX文件

我解壓縮了Excel文件,發現包含我需要的數據的xml是800mb解壓縮。

當您在Excel中加載相同的文件需要30秒。我想知道爲什麼在Python中需要那麼多時間?

+0

這由openpyxl文檔覆蓋。 –

+0

http://stackoverflow.com/questions/38208389/how-to-stream-in-and-manipulate-a-large-data-file-in-python –

+0

可能的重複[是openpyxl最快的軟件包來讀取大xlsx文件?](http://stackoverflow.com/questions/23796587/is-openpyxl-the-fastest-package-to-use-to-read-big-xlsx-files) –

回答

0

使用openpyxl's read-only mode來做到這一點。

您將可以立即使用相關工作表。

+0

我已經這樣做了,但它在開始逐行讀取之前將整個文件加載到內存中。 – Amine

+0

不,它不會將整個文件讀入內存。大概你沒有正確使用它。 –

1

這是它,我找到了一個解決方案。讀取xlsx表格的最快方法。

56MB超過500K行的文件和4張紙花6S繼續。

import zipfile 
from bs4 import BeautifulSoup 

paths = [] 
mySheet = 'Sheet Name' 
filename = 'xlfile.xlsx' 
file = zipfile.ZipFile(filename, "r") 

for name in file.namelist(): 
    if name == 'xl/workbook.xml': 
     data = BeautifulSoup(file.read(name), 'html.parser') 
     sheets = data.find_all('sheet') 
     for sheet in sheets: 
      paths.append([sheet.get('name'), 'xl/worksheets/sheet' + str(sheet.get('sheetid')) + '.xml']) 

for path in paths: 
    if path[0] == mySheet: 
     with file.open(path[1]) as reader: 
      for row in reader: 
       print(row) ## do what ever you want with your data 
     reader.close() 

享受和快樂的編碼。

+2

這並不「讀取」文件只是遍歷XML。在閱讀Excel文件時,大部分時間都是從XML轉換爲相關的Python結構。 –