Python+openpyxl使用列表推导式批量重命名多个Worksheet问题
报错原因
你编写的代码直接遍历了names列表的字符串值,将字符串作为下标传入工作表列表的索引位,不符合列表索引必须为整数/切片的语法要求,因此触发类型错误。
正确实现代码
因为Python列表推导式中不支持直接写赋值语句,我们可以通过setattr方法完成属性赋值,有两种可行写法:
- 按工作表与名称顺序一一匹配(推荐,无需调用私有属性
_sheets)
names = ['Ja', 'Ro', 'Ra', 'El'] [setattr(sheet, 'title', name) for sheet, name in zip(w_book, names)]
- 按下标索引匹配
names = ['Ja', 'Ro', 'Ra', 'El'] [setattr(w_book._sheets[i], 'title', name) for i, name in enumerate(names)]
注意事项
上述写法会生成一个全为None的临时列表,会造成不必要的内存开销,仅适合需要表达式返回值的特殊场景。常规使用场景下你原本的for循环写法可读性更高、性能更好,更推荐使用。
内容的提问来源于stack exchange,提问作者KateMac
相关产品推荐
相关产品推荐

