Python:移除循环生成的嵌套列表括号以适配谷歌表格插入
解决嵌套列表多余括号的问题
首先,咱们来定位问题:你当前代码里,cursor.fetchmany(each)返回的是包含单条记录的列表(比如[(105, 'David', ...)]),然后你把这个列表直接append到values_list中,就导致最终的列表多了一层嵌套结构,不符合Google Sheets insert_rows的参数要求。
接下来给你两种简单的修改方案:
方案1:直接提取fetchmany返回的单条记录
既然你的循环逻辑里每次应该只获取一条记录,那可以直接取fetchmany结果的第一个元素,再添加到列表中:
修改后的核心代码片段:
values_list = [] x = 0 # 提前定义index变量,避免运行报错 index = 0 for n in different_values: for each in different_values: different_id = list(different_values) arg_1 = different_id[x] cursor.execute(sqlstmt2, arg_1=arg_1) # 提取fetchmany结果的第一个元素,去掉外层列表 rows = cursor.fetchmany(each)[0] index += 1 x += 1 print(rows) values_list.append(rows) break print(values_list)
这样最终的values_list会变成:
[(105, 'David', '05.11.88', 'M', 'xxx', 'United States of America', 'republican', 'k'), (106, 'Valli', '16.06.89', 'M', 'xxx', 'United States of America', 'republican', 'k')]
完全符合insert_rows的参数要求,直接传入即可:
wks.insert_rows(row=1, number=1, values=values_list)
方案2:用extend替代append
如果你不想修改fetchmany的结果,也可以用extend代替append,因为extend会把rows里的每个元素(也就是单条记录)逐个添加到values_list中,而不是把整个rows列表作为一个元素添加:
修改核心部分:
rows = cursor.fetchmany(each) # 替换append为extend,自动平铺嵌套的列表 values_list.extend(rows)
这个方案更灵活,如果后续fetchmany返回多条记录,也能自动把所有记录平铺到values_list里,不需要额外调整。
另外提个小细节:你的代码里index变量没有提前定义,运行时会触发NameError,记得在循环前加上index = 0哦。
内容的提问来源于stack exchange,提问作者Jarda Jaromír
相关产品推荐
相关产品推荐

