Python写入Tab分隔CSV时去除嵌套列表方括号的问题咨询
问题说明
现有两个列表:
a = [1,2,3,4] b = [[2,3,4,5],[2,4,3,9], [9,4,6,8], [7,3,8,5]]
需求为将两个列表以制表符为分隔符写入CSV文件时,去除嵌套列表外层的方括号,仅保留括号内元素内容。
原有代码问题
当前使用的实现代码:
import csv with open('output.csv', 'w', encoding="ISO-8859-1", newline='') as myfile: wr = csv.writer(myfile, delimiter='\t') wr.writerows(zip(a,b))
代码运行后输出为:
1 [2, 3, 4, 5] 2 [2, 4, 3, 9] 3 [9, 4, 6, 8] 4 [7, 3, 8, 5]
期望输出为:
1 2, 3, 4, 5 2 2, 4, 3, 9 3 9, 4, 6, 8 4 7, 3, 8, 5
解决方案
问题根源是zip(a,b)生成的迭代项中,第二个元素为列表类型,csv模块写入时会直接调用列表的默认字符串表示,自动携带外层方括号。只需在写入前将嵌套列表处理为不带方括号的字符串即可,以下是两种可直接运行的实现:
- 方案1:字符串切片去除首尾方括号
直接将子列表转为字符串后,切掉首尾的[和],输出格式和预期完全一致:import csv a = [1,2,3,4] b = [[2,3,4,5],[2,4,3,9], [9,4,6,8], [7,3,8,5]] with open('output.csv', 'w', encoding="ISO-8859-1", newline='') as myfile: wr = csv.writer(myfile, delimiter='\t') for val_a, val_b in zip(a, b): # 转字符串后移除首尾的方括号 processed_b = str(val_b)[1:-1] wr.writerow([val_a, processed_b]) - 方案2:手动拼接子列表元素为字符串
如果需要自定义元素间的分隔格式,可以遍历子列表元素手动拼接,灵活度更高:import csv a = [1,2,3,4] b = [[2,3,4,5],[2,4,3,9], [9,4,6,8], [7,3,8,5]] with open('output.csv', 'w', encoding="ISO-8859-1", newline='') as myfile: wr = csv.writer(myfile, delimiter='\t') for val_a, val_b in zip(a, b): # 子列表元素转字符串后用", "拼接,无外层方括号 processed_b = ", ".join(map(str, val_b)) wr.writerow([val_a, processed_b])
两种方案运行后生成的CSV文件内容完全匹配预期输出,可根据实际需求选择。如果需要调整元素间的分隔样式(比如去掉空格、换其他分隔符),优先选择方案2修改连接符即可。
内容的提问来源于stack exchange,提问作者Gunners
相关产品推荐
相关产品推荐

