python openpyxl读取excel太慢了

时间:2017-03-13 03:38:17

标签: python excel csv xlsx openpyxl

我有一个.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?或者使用其他工具阅读?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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