【问题标题】:How to create a tabular data structure from a list of sublists with Gpread or XLWT?如何使用 Gpread 或 XLWT 从子列表列表中创建表格数据结构?
【发布时间】:2014-02-03 01:00:26
【问题描述】:

如何使用 GSpread 或 XLWT 从这个子列表列表中创建一个表格数据结构,其中索引 0 处的每个项目都在第一列,索引 1 处的每个项目都在第二列,等等?

例如,我想将以下列表中的所有 a 放入 column1,将所有 b 放入 column2,等等。换句话说,我只希望一个单元格有一个值,所以我想要 'a ' 在第一列的第一个单元格中,'aa1' 在第一列的第二个单元格中,'aa2' 在第一列的第三个单元格中,等等

 lst = [[['a','b','c'],['aa1','bb1','cc1'],['aaa2','bbb2','ccc2']],[['a','b','c'],['aa1','bb1','cc1'],['aaa2','bbb2','ccc2']]]

这就是我所拥有的,它使用了一个 for 循环,但我想知道是否有一种不同的方法可以创建一个 for 循环,这样我就不必为每个循环手动创建一个 for 循环额外的列。

    gc = gspread.login('username', 'password')
    sheet = gc.open("Curalate").sheet1

    row = 1
    for subsublist in lst[0]:
         sheet.update_cell(1,row,subsublist[0])
         row = row + 1
    row = 1 
    for subsublist in lst[0]:
         sheet.update_cell(2,row,subsublist[1])
         row = row + 1
             row = 1 
    for subsublist in lst[0]:
         sheet.update_cell(,row,subsublist[2])
         row = row + 13

另外,如果这是 xlwt,除了 sheet.udpate_cell 将被替换为 sheet.write 并且它是有组织的 sheet.write(row,column,datapoint) 而不是 (column, row, datapoint) 之外,它完全相同。

【问题讨论】:

  • 我不确定我是否掌握了您最初列表的结构。多重嵌套有意义吗?特别是,您是否尝试为每个单元格累积多个值?
  • 多重嵌套之所以重要,只是因为我想对多个工作表执行此操作,其中每个子列表都有自己的工作表,并且子列表中的每个子列表都有自己的列。不过,我不会在这里进入工作表,因为我第一个解决了多列问题。我只希望一个单元格有一个值,所以我想在第一列的第一个单元格中使用“a”,在第一列的第二个单元格中使用“aa1”,在第一列的第三个单元格中使用“aa2”,等等。我也会在上面澄清

标签: python list xlwt sublist gspread


【解决方案1】:

基于评论:“每个子列表都有自己的工作表”,我认为您可以使用嵌套循环非常简单地做到这一点。我熟悉xlwt但不熟悉gspread,所以我将使用xlwt语法进行演示:

# assume worksheet is an xlwt worksheet object
lst = [['a','b','c'],['aa1','bb1','cc1'],['aaa2','bbb2','ccc2']]
for (rownum, rowlist) in enumerate(lst):
    for (colnum, value) in enumerate(rowlist):
        worksheet.write(rownum, colnum, value)

enumeratexlwt 都是 0 索引的(至少在 Python 接口中),因此您无需更改它。如果 gspread 是 1-indexed(与 Excel 人机界面一样),则根据需要将 1 添加到 rownum 和/或 colnum 应该可以更正。

听起来您将拥有多个工作表,具体取决于主列表中二维子列表的数量。同样,您可以为此嵌套:

wb = xlwt.Workbook()
for (sheet_number, sublist) in enumerate(lst):
    ws = wb.add_sheet('sheet_%s', sheet_number + 1)
    for (rownum, rowlist) in enumerate(sublist):
        for (colnum, value) in enumerate(rowlist):
            ws.write(rownum, colnum, value)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2019-05-23
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多