【问题标题】:Reading rows from Excel sheet to list of lists using openpyxl使用openpyxl从Excel工作表中读取行到列表列表
【发布时间】:2017-10-01 05:06:46
【问题描述】:

我是 Python 新手,正在处理我想使用 Python 阅读的 Excel 工作表。我想将行读入列表列表。我已经用 Openpyxl 试过了

rows_iter = ws.iter_rows(min_col = 1, min_row = 2, max_col = 11, max_row = ws.max_row)

val1 = [[cell.value for cell in row] for row in rows_iter]

但这给了我一个所有行的列表作为里面的列表。

我想制作包含 15 或 12 或 10 行的不同列表(取决于条件)。

你能帮帮我吗? 这是示例 Excel 文件、获得的输出和预期的输出。Expected outputobtained op。我无法附加超过 2 个附件! 提前致谢!

【问题讨论】:

  • 您能否发布一个简单电子表格示例的屏幕截图以及您的预期输出和实际得到的输出,以帮助澄清您的问题?
  • 很高兴我能帮上忙!如果下面给出的答案对您有用,请单击它旁边的复选标记以表明您的问题已得到解答。另见what should I do when someone answers my question
  • 如果我理解正确,您正在尝试获取更长的列表列表,例如 [list1, list2, list3, list4, list5, list6],并将其转换为一组包含 2 个列表的列表 [[list1, list2]] [[list3, list4]] [[list5, list6]]
  • 是的。这正是我正在寻找的。列表中的列表数量取决于单元格中存在的值
  • 这有点棘手... :)

标签: python excel openpyxl


【解决方案1】:
rows_iter = ws.iter_rows(min_col = 1, min_row = 2, max_col = 11, max_row = ws.max_row)

val_intermediate = [[cell.value for cell in list(row)] for row in rows_iter]

# This would be set to whatever cell value contains N
N = ws['A1'].value

# This splits your shallow list of lists into a list of N lists of lists (!)
val1 = [val_intermediate[j:j+N] for j in range(1,len(val_intermediate),N)]

解释:第一个列表推导将返回一个浅表列表。第二个列表推导将您的浅表列表转换为一组 N 条目长的列表列表。要了解其工作原理,请考虑以下示例数据:

In [1]: a = [['a','b','c'],['d','e','f'],['g','h','i'],['j','k','l'] ['m','n','o'],['p','q','r']]

In [2]: N=2; [a[j:j+N] for j in range(1,len(a),N)]

Out[2]:
[[['d', 'e', 'f'], ['g', 'h', 'i']],
 [['j', 'k', 'l'], ['m', 'n', 'o']],
 [['p', 'q', 'r']]]

In [3]: N=3; [a[j:j+N] for j in range(1,len(a),N)]

Out[3]:
[[['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']],
 [['m', 'n', 'o'], ['p', 'q', 'r']]]

range(1,len(a),N) 将创建一个从 1 到 len(a) 的整数序列,跳过 N 个数字,这样您就可以选择正确的位置来拆分您的浅表列表。由于 [j:j+N] 索引,它会抓取 N-1 个项目。

【讨论】:

    猜你喜欢
    • 2015-09-20
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多