20210330更新了部分内容。

今天工作时,写了一小段代码,大概功能就是比对excel里的数据与数据库里的数据差异,具体实现就是根据excel里维度列(就是sql中where后的部分)到数据库查找相应的值,然后写入到excel,并且跟excel里的相关值进行比对,查看是否有差异。
因为要操作excel,所以又温习了下openpyxl. 下面是访问openpyxl指定工作表(sheet)的5种方法:

from openpyxl import *
wb = load_workbook(r'test.xlsx')
print(wb._sheets[0])
print(wb.get_active_sheet())   # 在新版本中是 wb.active
print(wb.get_sheet_by_name('Sheet1'))
print(wb['Sheet1'])
print(wb.worksheets[0])

以上方法第一个直接访问受保护的成员,是不推荐的,第二个方法只能获取当前活动的sheet,第三、四个方法是共通的,第五个方法根据索引来获取sheet,也是很不错的。
看到一个功能能这么多的实现,我觉得openpyxl的代码不太符合python之禅

There should be one-- and preferably only one --obvious way to do it.

不过我可以来自己定义一个仅有一个且最好的方法:

  1. 如果知道sheet名,那么就用wb[‘Sheet1’])
  2. 如果知道工作表索引,就用wb.worksheets[0]
  3. 如果想遍历那么用:
for sheet in wb.worksheets:
    print(sheet)

我挺认同python之禅的这一条的,有时候选择多了确实很让人困惑,不如实现的方式少一点,好一点。这就跟买东西一样:
与其你给我一堆东西给我选,不如直接告诉我哪个是好的。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐