Python如何将含键和列表值的嵌套列表逐列写入CSV文件
问题原因
当前每个待写入的行元素由「字符串+列表」两个部分组成,csv.writer的writerow方法会把传入的可迭代对象的每个元素作为单独一列处理,因此原写法会把第二个列表整体作为单列输出,产生带引号的列表字符串。
你之前拼接字符串后输出异常的原因是:字符串本身属于可迭代对象,传入writerow时会被逐字符拆分作为独立字段,因此会出现单个字符拆分的问题。
解决方法
只需将每个行元素展开为一维序列(每个元素对应CSV的一列)即可,推荐两种写法:
- 解包语法(Python 3.0+ 支持)
import csv # 注意不要用list作为变量名,list是Python内置关键字,会覆盖原有功能 data = [('ac', [1, 1]), ('alex.miller', [1, 2]), ('blossom', [2, 3])] with open(r"user_statistics.csv", "a+", newline='', encoding='utf-8') as csvfile_user: writer = csv.writer(csvfile_user) for row in data: # 把字符串和列表内的元素拆分后合并为单行多列 writer.writerow( (row[0], *row[1]) )
- 列表拼接(兼容所有Python版本)
把上述代码中writerow的部分替换为列表拼接即可,效果完全一致:
writer.writerow( [row[0]] + row[1] )
附加说明
- 打开CSV时添加
newline=''参数是Python官方推荐的写法,可以避免Windows系统下输出的CSV出现多余空行 - 添加
encoding='utf-8'参数可以避免中文、特殊字符出现乱码问题
内容的提问来源于stack exchange,提问作者Martin P.
相关产品推荐
相关产品推荐

