You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python技术问询:如何将多组列表按列写入CSV文件并保存到目录

解决Python中按列写入CSV的问题

别担心,我帮你搞定这个问题!你遇到的核心是数据转置的问题——原来的代码是把每个子列表作为一行写入,但你需要把每个原列表作为一列,这就需要先把你的数据“转过来”,再写入CSV。

核心思路:转置你的列表数据

Python内置的zip()函数可以帮你轻松完成转置:它会把多个列表的对应位置元素打包成元组,这样原本的“列数据”就变成了“行数据”,再用writerows()写入就能得到你想要的列格式。

如果你的列表长度不一致,还可以用itertools.zip_longest()来保留所有元素,用指定值填充空缺的位置(比如空字符串'')。

完整代码示例

情况1:所有列表长度一致

import csv
import os

# 你的原始列表
list1 = ['a', 'b', 'c', 'd']
list2 = ['e', 'f', 'g', 'h']
list3 = ['i', 'j', 'k', 'l']

# 指定保存的目录和文件名
save_directory = './my_saved_csvs'  # 相对路径,也可以用绝对路径比如'/Users/yourname/Documents/csv_files'
file_name = 'column_data.csv'
full_file_path = os.path.join(save_directory, file_name)

# 确保保存目录存在,不存在则创建
os.makedirs(save_directory, exist_ok=True)

# 转置数据:把列转成行
transposed_data = zip(list1, list2, list3)

# 写入CSV文件
with open(full_file_path, 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerows(transposed_data)

情况2:列表长度不一致(保留所有元素)

如果你的列表长度不同,比如list1有4个元素,list2有5个,用zip_longest来处理:

import csv
import os
from itertools import zip_longest

list1 = ['a', 'b', 'c', 'd']
list2 = ['e', 'f', 'g', 'h', 'm']  # 比其他列表多一个元素
list3 = ['i', 'j', 'k']  # 比其他列表少一个元素

save_directory = './my_saved_csvs'
file_name = 'column_data_with_fill.csv'
full_file_path = os.path.join(save_directory, file_name)

os.makedirs(save_directory, exist_ok=True)

# 用空字符串填充空缺的位置,也可以改成None或者其他值
transposed_data = zip_longest(list1, list2, list3, fillvalue='')

with open(full_file_path, 'w', newline='') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerows(transposed_data)

代码说明

  1. 转置数据zip(list1, list2, list3)会生成类似('a','e','i'), ('b','f','j'), ...的元组,每个元组对应CSV的一行,最终就实现了list1是第一列、list2是第二列的效果。
  2. 指定目录保存
    • os.path.join()拼接目录和文件名,避免手动拼接路径时出现斜杠错误(比如Windows和Linux的路径分隔符不同)。
    • os.makedirs(save_directory, exist_ok=True)会自动创建不存在的目录,exist_ok=True确保目录已存在时不会抛出错误。
  3. 自动关闭文件:使用with语句打开文件,不需要手动调用csv_file.close(),Python会在代码块结束后自动关闭文件,更安全。

最终CSV效果

运行第一个代码后,打开CSV文件会看到:

a,e,i
b,f,j
c,g,k
d,h,l

完全符合你想要的按列排列的需求!

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

火山引擎 最新活动