如何用Python的openpyxl从Excel行数据创建元组列表
如何用openpyxl将Excel每行转为元组并组成列表?
你现在的问题是代码把所有单元格值都扁平化到一个列表里了,没有按行分组。其实只需要调整循环逻辑,按行收集值并转成元组就能解决。
先看你原代码的问题:
from openpyxl import load_workbook workbook = load_workbook('work_1.xlsx') worksheet = workbook.get_sheet_by_name('Sheet1') sheet_cells = [] for rows in worksheet.iter_rows(): for cell in rows: sheet_cells.append(cell.value) print sheet_cells
这段代码在遍历每一行后,又嵌套遍历每个单元格,直接把单个值加到列表里,自然会把所有值都混在一起。
修改后的代码方案
我给你两种可行的写法,都能实现需求:
方法一:使用iter_rows的values_only参数(推荐)
这个参数能让迭代行时直接返回单元格的值,不用手动取cell.value,代码更简洁:
from openpyxl import load_workbook workbook = load_workbook('work_1.xlsx') # 注意:get_sheet_by_name已被弃用,新版本推荐直接用下标访问工作表 worksheet = workbook['Sheet1'] sheet_cells = [] # values_only=True 直接获取每行的单元格值组成的元组 for row in worksheet.iter_rows(values_only=True): sheet_cells.append(row) print(sheet_cells)
方法二:手动遍历单元格并组装元组
如果你习惯手动处理每个单元格,也可以这样写:
from openpyxl import load_workbook workbook = load_workbook('work_1.xlsx') worksheet = workbook['Sheet1'] sheet_cells = [] for row in worksheet.iter_rows(): # 用生成器表达式收集当前行的所有单元格值,再转成元组 row_values = tuple(cell.value for cell in row) sheet_cells.append(row_values) print(sheet_cells)
说明
- 两种方法运行后都会得到你想要的结果:
[(1L,2L,3L,4L),(5L,6L,7L,8L),(9L,10L,11L,12L)] - 替换
get_sheet_by_name是因为这个方法在openpyxl新版本中已被标记为废弃,使用workbook['工作表名']是更规范的写法。
内容的提问来源于stack exchange,提问作者user7681184
相关产品推荐
相关产品推荐

