python openpyxl读取excel太慢

问题描述 投票:0回答:3

我有一个 .xlsx 文件,拥有 1841 行。每行有 30 列。使用 openpyxl 将整个信息保存到列表中。

def get_value(i,ws,article_row):
    value=ws.cell(row=article_row,column=i).value
    i+=1
    return value,i
def geneList(f):
    wb = load_workbook(filename=f, read_only=True)
    ws = wb.worksheets[0]
    max_row = ws.max_row
    info_list=[]
    for ar_row in range(2,max_row+1):
        i=3#start from the 3rd column: sourceid 
        sourceID,i=get_value(i,ws,ar_row)
        pv,i=get_value(i,ws,ar_row)
        pubtype,i=get_value(i,ws,ar_row)
......
        item_dict={'sourceID':sourceID,'pv':pv,'pubtype':pubtype,
                   ...}
    info_list.append(item_dict)

但是读完所有信息大约需要20分钟。不知道这个问题怎么解决?解析信息的速度太慢。将 .xlsx 转换为 .csv?或者使用其他工具来阅读?

python excel csv xlsx openpyxl
3个回答
6
投票

该问题与在只读模式下广泛使用

cell
方法有关。在只读模式下,openpyxl 按需读取相关工作表以减少内存使用,但这意味着每次查找时 XML 将被再次解析。您重写的代码强制 openpyxl 重新解析每行中每个单元格的文件,这显然很慢。这也是完全没有必要的,因为有一个用于基于行的访问的 API。只需使用
ws.iter_rows()
和相关分隔符即可获取所需的单元格。


0
投票

我在通过 openpyxl 打开 xlsx 花费了太多时间时遇到了类似的问题。 我尝试从 Excel 工作表中删除所有数据,但没有太大帮助。看似空的 Excel 文件大小约为 500 kB。 我以 zip 存档的形式打开 xlsx 文件,发现里面有一个 7MB 的“styles.xml”文件。我无法从 Excel 单元格中删除样式,因此我只是创建了一个新工作簿并复制/粘贴了原始文件中的所有内容。 它工作正常,占用空间小,并且可以用 openpyxl 快速打开。 祝你好运!


-1
投票

您可以使用xlwings。它非常快速且易于使用。

© www.soinside.com 2019 - 2024. All rights reserved.