Python csv.writerow()写入列表时多组数据挤在同一行如何解决
问题根因
你当前写入逻辑的错误点很明确:writerow() 单次调用仅会写入一行内容,你传入[tickets, duration]时,是把两个完整列表作为这一行的两个单元格值写入,自然会出现所有数据挤在同一行的情况。
修正方案
要实现逐行对应写入,需要把两个列表同位置的元素一一配对,每一组配对值作为单独一行写入即可。可以直接用Python内置的zip()函数完成两个列表的配对,搭配csv模块的writerows()(注意方法名是复数,支持批量写入多行)就能实现预期效果。
修正后的可运行代码:
import csv issues_test = s_json['issues'] tickets, duration = [], [] for item in issues_test: tickets.append(item['key'].strip()) duration.append(item['fields']['customfield_154'].strip()) header = ['Ticket', 'Duration'] with open('P1_6.7.csv', 'a', newline='', encoding='utf-8') as arc: writer = csv.writer(arc) writer.writerow(header) # 配对两个列表的元素,批量写入多行 writer.writerows(zip(tickets, duration))
相关注意点:
- 代码里的
strip()是用来清理你示例数据中DC-631前面多余的首尾空白字符,如果确认原始数据没有多余空格,可以去掉这部分处理。 - 打开文件时传入
newline=''是Python csv模块的官方推荐写法,可以避免Windows系统下写入CSV时出现多余空行的问题;加上encoding='utf-8'可以避免特殊字符、中文乱码。 - 你原代码里
s_json[['issues'][0]]属于冗余写法,['issues'][0]的结果就是字符串'issues',直接写s_json['issues']取值即可。
可选逐行写入写法
如果你不想用批量写入的writerows(),也可以通过循环遍历配对结果逐行写入,最终生成的文件效果完全一致:
with open('P1_6.7.csv', 'a', newline='', encoding='utf-8') as arc: writer = csv.writer(arc) writer.writerow(header) for ticket_num, dur in zip(tickets, duration): writer.writerow([ticket_num, dur])
内容的提问来源于stack exchange,提问作者Felipe Useda
相关产品推荐
相关产品推荐

