我有一个大的xlsx Excel文件(56mb,550k行),我尝试从中读取前10行。我尝试使用xlrd
,openpyxl
和pyexcel-xlsx
,但它们总是花费超过35分钟,因为它会将整个文件加载到内存中。
我解压缩了Excel文件,发现包含我需要的数据的xml
是800mb解压缩。
在Excel中加载同一文件时需要30秒。我想知道为什么在Python中花费那么多时间?
答案 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
就解决方案而言:我建议,作为一种解决方法: