python openpyxl读取excel太慢

python openpyxl读取excel太慢,python,excel,csv,xlsx,openpyxl,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

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

您可以使用xlwings。这是非常快速和易于使用

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

首先,您可以在google Anaconda Python中安装Anaconda的包搜索。该软件包包含许多模块,包括xlwings。之后,您可以使用以下方法导入它:导入xlwigns作为xw。要连接到一本已经打开的书,请使用xb=xw.book,最后我可以使用xw.RangeA1:B2.value来获取定义范围内的值。请阅读xlwigns网站上的文档以了解更多信息。请发布完整代码,但我怀疑问题在于您没有为只读文件使用正确的API。非常感谢!使用ws.iter_行可以非常快速地获取整个信息。但我不清楚使用data_only和read_only模式的相应情况。当仅使用数据时,当使用另一个数据时?文档清楚地解释了不同的参数。在我看来,您可能在没有查阅文档的情况下工作。只读:为阅读而优化,内容无法编辑;data_仅控制带有公式的单元格是否具有公式默认值或上次Excel读取工作表时存储的值。对不起,我不明白为什么官方定义仅在我的情况下使用数据_。