You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将数据按列而非行写入CSV文件

解决Python列表写入CSV时记录挤在一行的问题

我希望将Python列表all_results写入CSV文件,但运行以下代码后,所有记录都挤在同一行,而非每行一条记录:

import csv
fh = open('output.csv', 'w')
cvs_writer = csv.writer(fh)

# 写入表头(使用不带s的writerow)
cvs_writer.writerow(["Column 1"])

# 写入结果集(使用带s的writerows)
cvs_writer.writerows([all_results])
                                                                                            
fh.close()

当前输出

|Column 1|
|row 1| |row 2| |row 3| |row 4| |row 5| |row 6| ---

期望输出

|Column 1|
|row 1|
|row 2|
|row 3|
|row 4|
|row 5|
|row 6|

问题原因

csv.writerows()接收的是行数据的列表,每个子列表代表一行的列内容。你传入[all_results],相当于把整个all_results列表当成了一行的多列数据,所以所有元素会被放在同一行的不同列中。

解决方法

要实现每行一条记录(单列),需要把all_results中的每个元素单独包装成单元素列表,再传给写入方法:

方法1:用writerow循环写入

import csv

all_results = ["row 1", "row 2", "row 3", "row 4", "row 5", "row 6"]

fh = open('output.csv', 'w')
cvs_writer = csv.writer(fh)
cvs_writer.writerow(["Column 1"])

# 遍历每个元素,作为单独一行写入
for item in all_results:
    cvs_writer.writerow([item])

fh.close()

方法2:用列表推导式配合writerows

import csv

all_results = ["row 1", "row 2", "row 3", "row 4", "row 5", "row 6"]

fh = open('output.csv', 'w')
cvs_writer = csv.writer(fh)
cvs_writer.writerow(["Column 1"])

# 生成单元素列表的集合,一次性写入
cvs_writer.writerows([[item] for item in all_results])

fh.close()

优化建议:使用with语句自动管理文件

推荐用with上下文管理器,无需手动关闭文件,代码更健壮:

import csv

all_results = ["row 1", "row 2", "row 3", "row 4", "row 5", "row 6"]

with open('output.csv', 'w', newline='') as fh:
    cvs_writer = csv.writer(fh)
    cvs_writer.writerow(["Column 1"])
    # 二选一即可
    for item in all_results:
        cvs_writer.writerow([item])
    # cvs_writer.writerows([[item] for item in all_results])

内容的提问来源于stack exchange,提问作者user19686684

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:40:27