将一个CSV的列连接到另一个CSV

时间:2019-04-19 08:08:30

标签: python csv

因此,我尝试将列值从一个csv合并到另一个csv,同时将其保存到最终的csv文件中。但是我想遍历所有行,将每行的列值添加到原始csv的每一行。

换句话说,csv1具有3行。

Row 1: Frog,Rat,Duck
Row 2: Cat,Dog,Cow
Row 3: Moose,Fox,Zebra

我想将csv2的另外2个列值组合到这些行中的每一行。

Row 1: Chicken,Pig
Row 2: 
Row 3: Bear,Boar

所以csv3最终看起来像这样。

Row 1: Frog,Rat,Duck,Chicken,Pig
Row 2: Moose,Fox,Zebra,Bear,Boar

但是同时如果csv2中有一行根本没有任何值,我不希望它从csv1中复制该行。换句话说,该行在最终的csv文件中根本不存在。我不喜欢使用熊猫,因为到目前为止我在代码中一直使用csv模块,但是可以使用任何方法。

到目前为止,我碰到过这种方法,如果只有一行,它会起作用。但是,如果不止如此,它只会添加随机行并将值附加到整个地方。并出于某种奇怪的原因将两列合并为一个字符串,同时在csv的末尾添加了额外的空白行。

import csv

f1 = open ("2.csv","r", encoding='utf-8')

with open("3.csv","w", encoding='utf-8', newline='') as f:
    writer = csv.writer(f)
    with open("1.csv","r", encoding='utf-8') as csvfile:
        reader = csv.reader(csvfile, delimiter=",")
        for row in reader:
            row[6] = f1.readline()
            writer.writerow(row)

f1.close()

在给出的结果上方使用相同的示例csvs。

Frog,Rat,Duck,Chicken,Pig 
Cat,Dog,Cow
Moose,Fox,Zebra,Bear,Boar

1 个答案:

答案 0 :(得分:1)

您可以zip将两个文件合并在一起,然后遍历每一行。然后,您可以串联两个列表并将结果写入文件。

要检查是否有空行,我们可以将行集与空字符串集进行比较。

import csv

new_csv_data = []
EMPTY_ROW = set([""])


with open("1.csv", "r", newline="") as first_file, open("2.csv", "r", newline="") as second_file, open("3.csv", "w", newline="") as out_file:
    first_file_reader = csv.reader(first_file)
    second_file_reader = csv.reader(second_file)
    out_file_writer = csv.writer(out_file)

    # The iterator will stop when the shortest file is finished
    for row_1, row_2 in zip(first_file_reader, second_file_reader):
        # Check if the second row is empty, skipping if it is
        if not row_2 or set(row_2) == EMPTY_ROW:
            continue

        out_file_writer.writerow(row_1 + row_2)