使用 openpyxl 访问工作表。哪种方法更快?

Accessing the workshet with openpyxl. Which methot is faster?

我正在重构一个基于 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

谁能解释一下将工作表保存为变量然后使用它访问单元格值与每次调用工作表时访问它之间的区别?

它在背景中有何不同,是否有更快的方法?

这个问题本身与 openpyxl 无关。是的,您使用的是openpyxl,但是您的问题更笼统,可以应用于许多其他场景。

现在,您并没有真正使用两种方法来访问单元格。您正在使用一个,唯一的区别是您访问 sheet.

的方式

func1 中,您正在使用 worksheet 对象并访问其单元格。

func2 中,您正在添加另一个操作,该操作也在每次迭代时访问 sheet。执行 workbook.wb['Sheet1'] 意味着访问工作簿的 sheets 池并获取名称为 'Sheet1' 的工作簿。您在 每次迭代 上都这样做,所以这当然会比使用预取的 sheet.

花费更多的时间

除此之外,这似乎确实花费了很多时间,其中一部分可能与您打开文件的方式有关。好像你过于复杂了。尝试做:

from openpyxl import load_workbook
workbook = load_workbook(path)
worksheet = workbook['Sheet1']