如何将列表集合数据垂直写入CSV文件并完成字符串转数值处理
问题原因
你现有代码中使用join()将整个列表拼接为单个字符串后仅调用了一次writerow(),相当于只写了1行数据,所有值都被塞进了对应列的同一个单元格,这是导出效果不符合预期的核心原因。
修正方案
要实现两列数据垂直逐行对应写入,同时完成逗号过滤和整数类型转换,可按如下调整代码:
import csv fieldnames = ['Signals', 'Costs'] signals = ['-108', '-107', '-107', '-107', '-107', '-107', '-94', '-87', '-108'] costs = ['8325', '5175', '2698', '1754', '4767', '3652', '2417', '7527', '3698'] with open('Data_to_Csv.csv', 'w', newline='', encoding='utf-8') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() # 按位置配对两个列表的元素逐行写入 for sig_str, cost_str in zip(signals, costs): # 先过滤逗号再转换为整数 sig_val = int(sig_str.replace(',', '')) cost_val = int(cost_str.replace(',', '')) writer.writerow({'Signals': sig_val, 'Costs': cost_val})
关键说明
- 打开文件时新增
newline=''是csv模块的标准写法,可避免Windows系统下导出的CSV出现多余空行 - 用
zip()函数按位置配对两个列表的元素,每次循环写入一对值,自然就能得到两列垂直排布的效果 - 如果你的数据中存在带逗号的字符串,
replace(',', '')会先将逗号过滤后再做整数转换,完全匹配你的需求 - 若两个列表长度不一致,可根据实际需求补充截断或补默认值的逻辑,你提供的示例中两个列表长度相同,直接使用
zip()即可正常运行
内容的提问来源于stack exchange,提问作者Elle Oliver
相关产品推荐
相关产品推荐

