因此,我尝试将列值从一个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
答案 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)