Python嵌套列表转CSV异常求助:输出格式不符合预期
解决CSV写入格式异常的问题
我来帮你分析下问题所在:你遇到的情况,大概率是因为数据的嵌套层级不对,导致csv.writer.writerows()把整个子列表当成了单个字段处理,最终输出的CSV里只是把列表转成字符串并加了引号,而没有把列表元素拆分成逗号分隔的标准字段。
问题根源拆解
举个例子,如果你的data是这种多余嵌套的结构:
data = [[[u'Part #', u'UPC Code', u'Description']]]
writerows()会把内层的[u'Part #', ...]当成一个独立字段,输出就会变成:
"[u'Part #', u'UPC Code', u'Description']"
这就是你看到的“仅保留列表结构加引号”的错误格式。
而正确的数据结构应该是二维列表:外层列表是行的集合,每个子列表代表一行数据,子列表里的元素就是该行的各个字段,比如:
data = [ [u'Part #', u'UPC Code', u'Description'], [u'P001', u'123456789012', 'Wireless Mouse'] ]
解决方案
根据你的数据结构,对应调整即可:
如果只有一行数据
要么改用writerow()方法(注意少个s),要么把单行数据包裹成二维列表:import csv data = [u'Part #', u'UPC Code', u'Description'] with open('tldsearchresults.csv', 'wb') as myfile: wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) wr.writerow(data) # 用writerow处理单行如果有多行但都被额外嵌套
用列表推导式扁平化数据,去掉多余的嵌套层级:import csv # 假设原数据是多层嵌套的结构 data = [[[u'Part #', u'UPC Code', u'Description']], [[u'P001', u'123456789012', 'Wireless Mouse']]] # 扁平化处理 flattened_data = [row for sublist in data for row in sublist] with open('tldsearchresults.csv', 'wb') as myfile: wr = csv.writer(myfile, quoting=csv.QUOTE_ALL) wr.writerows(flattened_data)验证数据结构
不确定结构的话,可以先打印数据确认:print(data) # 正确结构应该输出类似:[[字段1, 字段2], [字段1, 字段2]]
调整后生成的CSV就会是标准的逗号分隔格式,比如:
"Part #","UPC Code","Description" "P001","123456789012","Wireless Mouse"
内容的提问来源于stack exchange,提问作者xl_cheese
相关产品推荐
相关产品推荐

