如何修正Python代码,实现循环输出按列写入CSV并使列内容一一对应?
修正Python代码生成对应列的CSV文件
你的需求是生成表头为Y1、Y2的CSV文件,每行内容为i1与z1、i2与z2这种一一对应的形式,但现有代码把两个列表整行写入,导致无法实现列对应,以下是修正方案:
问题分析
原代码把row和row_1两个完整列表作为一行的两个元素写入CSV,最终会得到一行包含两个列表的内容,完全不符合每行一对i和z的结构要求。
修正代码
import csv import os # 以追加模式打开文件,若需要覆盖原有内容可将模式改为"w" with open(r"./file.csv", "a", newline="") as f1: writer = csv.writer(f1, delimiter="\t", lineterminator="\n") # 仅当文件为空时写入表头,避免重复追加 if os.path.getsize(r"./file.csv") == 0: writer.writerow(["Y1", "Y2"]) # 用zip将两个列表的元素一一配对,批量写入每行数据 writer.writerows(zip(test_data["data"][1], test_results))
关键说明
zip(test_data["data"][1], test_results)会把两个列表中索引对应的元素配对,生成(i1,z1)、(i2,z2)这类元组,正好对应CSV的每行两列writerows()方法可以直接批量写入所有配对后的行,无需手动循环收集元素- 加入文件大小判断是为了避免每次追加内容时重复写入表头,若不需要追加功能,直接用
"w"模式覆盖文件,可去掉判断直接写表头
如果需要手动控制逐行写入,也可以用以下写法:
import csv with open(r"./file.csv", "w", newline="") as f1: writer = csv.writer(f1, delimiter="\t", lineterminator="\n") # 直接写入表头 writer.writerow(["Y1", "Y2"]) # 循环遍历配对元素,逐行写入 for i, z in zip(test_data["data"][1], test_results): writer.writerow([i, z])
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

