我有一个.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?或者使用其他工具阅读?
答案 0 :(得分:1)
问题与在只读模式下广泛使用sessions
方法有关。在只读模式下,openpyxl按需读取相关工作表以减少内存使用率,但意味着每次查找都会再次解析XML。您重写的代码强制openpyxl为每行中的每个单元重新分析文件,这显然很慢。这也是完全没必要的,因为存在用于基于行的访问的API。只需将cell
与相关分隔符一起使用即可获得所需的单元格。
答案 1 :(得分:0)
您可以使用xlwings。它非常快速且易于使用。