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

如何用Python将两个CSV文件的行两两组合生成新CSV?

实现CSV文件的笛卡尔积两两组合合并

这其实是要实现两个CSV的笛卡尔积合并——把a.csv的每一行和b.csv的每一行都配对拼接,最终生成c.csv。结合你的需求(保持b.csv列顺序、用|作为分隔符),我给你一个Python的实现方案,比单纯的循环更规范可靠:

基础实现(适合中小文件)

这个方案会先把两个文件的内容读入内存,然后完成两两组合,代码简洁易懂:

import csv

# 定义文件路径
a_path = "a.csv"
b_path = "b.csv"
c_path = "c.csv"

# 读取a.csv的所有行(包含表头)
with open(a_path, mode='r', newline='', encoding='utf-8') as a_file:
    a_reader = csv.reader(a_file)
    a_rows = list(a_reader)

# 读取b.csv的所有行(包含表头)
with open(b_path, mode='r', newline='', encoding='utf-8') as b_file:
    b_reader = csv.reader(b_file)
    b_rows = list(b_reader)

# 写入合并后的c.csv
with open(c_path, mode='w', newline='', encoding='utf-8') as c_file:
    c_writer = csv.writer(c_file, delimiter='|')  # 设置分隔符为|
    
    # 先写入表头:a的表头 + b的表头
    if a_rows and b_rows:
        c_writer.writerow(a_rows[0] + b_rows[0])
    
    # 双重循环实现两两组合
    for a_row in a_rows[1:]:  # 跳过a的表头
        for b_row in b_rows[1:]:  # 跳过b的表头
            c_writer.writerow(a_row + b_row)

针对大文件的优化方案

如果你的CSV文件很大,一次性读入内存会占用过多资源,可以改成逐行读取a.csv,然后对每一行a,遍历b.csv的所有行(注意这里可以把b.csv的内容提前读入一次,避免重复打开):

import csv

a_path = "a.csv"
b_path = "b.csv"
c_path = "c.csv"

# 提前读取b.csv的所有行(只读一次)
with open(b_path, mode='r', newline='', encoding='utf-8') as b_file:
    b_reader = csv.reader(b_file)
    b_rows = list(b_reader)

with open(a_path, mode='r', newline='', encoding='utf-8') as a_file, \
     open(c_path, mode='w', newline='', encoding='utf-8') as c_file:
    a_reader = csv.reader(a_file)
    c_writer = csv.writer(c_file, delimiter='|')
    
    # 写入表头
    a_header = next(a_reader)
    c_writer.writerow(a_header + b_rows[0])
    
    # 逐行处理a的内容,和b的每一行组合
    for a_row in a_reader:
        for b_row in b_rows[1:]:
            c_writer.writerow(a_row + b_row)

关键细节说明

  • 使用Python内置的csv模块处理,比手动拆分/拼接字符串更可靠,能自动处理包含分隔符的字段(比如字段内容里有|的情况,会自动用引号包裹)。
  • 代码里默认保留了表头,如果你的CSV没有表头,可以去掉表头相关的逻辑,直接从第一行开始循环。
  • 设置newline=''是为了避免Windows系统下出现多余的空行。

举个简单的效果示例:

a.csv内容:
name,age
Alice,25
Bob,30

b.csv内容:
city,job
NewYork,Engineer
London,Designer

生成的c.csv内容:
name|age|city|job
Alice|25|NewYork|Engineer
Alice|25|London|Designer
Bob|30|NewYork|Engineer
Bob|30|London|Designer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:22:37