如何用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
相关产品推荐
相关产品推荐

