所以我试图将列值从一个 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
您可以将两个文件压缩在一起,然后遍历每一行。然后您可以连接两个列表并将结果写入文件。
要检查是否有空行,我们可以将行集与空字符串集进行比较。
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句