我正在重构一个基于openpyxl的小项目,以分析.xlsx输入。我正在尝试减少其完成工作所需的时间,并且目前正在尝试访问Excel工作表的单元格值的方法。
我用timeit测试了两种方法(下面的代码),其中一种似乎比第一种快一倍。
import timeit
from openpyxl.reader.excel import ExcelReader
samplesPath = r'path_to_excel_file'
workbook = ExcelReader(samplesPath)
workbook.read()
worksheet = workbook.wb['Sheet1']
def func1():
for i in range(1,10):
worksheet.cell(i,1).value = 'value'
def func2():
for i in range(1,10):
workbook.wb['Sheet1'].cell(i,1).value = 'value'
print(timeit.timeit(func1))
print(timeit.timeit(func2))
Timeit分数:
func1 = 29.23 func2 = 51.07
有人可以解释一下将工作表另存为变量,然后使用它访问单元格值,以及每次调用工作表时访问它的区别吗?
它在后台有何变化?是否有更快的方法?
答案 0 :(得分:1)
这个问题不是关于openpyxl
本身。是的,您正在使用openpyxl,但是您的问题较为笼统,可以应用于许多其他情况。
现在,您并没有真正使用两种方法来访问单元格。您只使用一种,唯一的区别是访问工作表的方式。
在func1
中,您正在使用worksheet
对象并访问其单元格。
在func2
中,您添加了另一个操作,该操作还在每次迭代时都访问工作表。进行workbook.wb['Sheet1']
意味着访问工作簿的工作表池并获取名称为“ Sheet1”的工作表池。您是在每次迭代上执行此操作的,因此,与使用预取工作表相比,这当然会花费更多时间。
除此之外,这似乎花费了很多时间,其中一部分可能与打开文件的方式有关。似乎您过于复杂了。尝试做:
from openpyxl import load_workbook
workbook = load_workbook(path)
worksheet = workbook['Sheet1']