在python中处理大型XLSX文件

问题描述:

我有一个大的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) –

使用openpyxl's read-only mode来做到这一点。

您将可以立即使用相关工作表。

+0

我已经这样做了,但它在开始逐行读取之前将整个文件加载到内存中。 – Amine

+0

不,它不会将整个文件读入内存。大概你没有正确使用它。 –

这是它,我找到了一个解决方案。读取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结构。 –