栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

与xlrd相比,使用openpyxl读取Excel文件的幅度要慢

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

与xlrd相比,使用openpyxl读取Excel文件的幅度要慢

您可以遍历工作表:

def UseOpenpyxl(file_name):    wb = openpyxl.load_workbook(file_name, read_only=True)    sheet = wb.active    rows = sheet.rows    first_row = [cell.value for cell in next(rows)]    data = []    for row in rows:        record = {}        for key, cell in zip(first_row, row): if cell.data_type == 's':     record[key] = cell.value.strip() else:     record[key] = cell.value        data.append(record)    return data

这应该扩展到大文件。如果列表

data
太大,则可能需要对结果进行分块 。

现在,openpyxl版本的时间大约是xlrd版本的两倍:

%timeit xlrd_results = UseXlrd('foo.xlsx')1 loops, best of 3: 3.38 s per loop%timeit openpyxl_results = UseOpenpyxl('foo.xlsx')1 loops, best of 3: 6.87 s per loop

请注意,xlrd和openpyxl可能会稍微不同地解释什么是整数和什么是浮点数。对于我的测试数据,我需要添加

float()
以使输出具有可比性:

def UseOpenpyxl(file_name):    wb = openpyxl.load_workbook(file_name, read_only=True)    sheet = wb.active    rows = sheet.rows    first_row = [float(cell.value) for cell in next(rows)]    data = []    for row in rows:        record = {}        for key, cell in zip(first_row, row): if cell.data_type == 's':     record[key] = cell.value.strip() else:     record[key] = float(cell.value)        data.append(record)    return data

现在,这两个版本为我的测试数据提供了相同的结果:

>>> xlrd_results == openpyxl_resultsTrue


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633930.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号