在python中处理大型XLSX文件

时间:2016-07-05 16:15:14

标签: python excel xlsx openpyxl xlrd

我有一个大的xlsx Excel文件(56mb,550k行),我尝试从中读取前10行。我尝试使用xlrdopenpyxlpyexcel-xlsx,但它们总是花费超过35分钟,因为它会将整个文件加载到内存中。

我解压缩了Excel文件,发现包含我需要的数据的xml是800mb解压缩。

在Excel中加载同一文件时需要30秒。我想知道为什么在Python中花费那么多时间?

3 个答案:

答案 0 :(得分:2)

使用openpyxl's read-only mode执行此操作。

您将能够立即使用相关工作表。

答案 1 :(得分:2)

就是这样,我找到了解决方案。读取xlsx工作表的最快方法。

行程超过500k的56mb文件和4张需要6秒才能继续。

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 :(得分:-1)

您遇到的加载时间与内存芯片的io速度直接相关。

pandas加载excel文件时,会制作该文件的多个副本-由于文件结构未序列化(excel使用二进制编码)。要深入了解,请查看我写的这篇文章:Loading Ridiculously Large Excel Files in Python

就解决方案而言:我建议,作为一种解决方法:

  • 通过具有专用硬件的虚拟机(这是AWS所提供的)通过虚拟机加载excel文件
  • 将文件保存为csv格式以供本地使用。
  • 为获得更好的性能,请使用优化的数据结构,例如parquet