首页 > 解决方案 > 比较两个 csv 文件并将匹配的条目写入第三个文件 python

问题描述

我在这里看到了很多这样的问题,但没有一个解决方案对我有帮助。假设我们有两个这样的 csv 文件:

文件 1

12345:somevalue:anothervalue
23456:yetanother:onemore
23423:somevalue:anothervalue
41231:somevalue:anothervalue

文件2

12345:desiredvalue:desiredvalue:andonemore
22334:desiredvalue:desiredvalue:andonemore
23456:desiredvalue:desiredvalue:andonemore
32213:desiredvalue:desiredvalue:andonemore
54412:desiredvalue:desiredvalue:andonemore
64123:desiredvalue:desiredvalue:andonemore

期望的结果是这样的:根据file1我需要获取具有相同起始编号的行file2并将匹配值写入其中的第一列中的数字file3,应该如下所示:

12345:desiredvalue:desiredvalue:andonemore
23456:desiredvalue:desiredvalue:andonemore

我试过这样:

with open('file1', 'r', newline='') as file1, open('file2.csv', 'r', newline='') as file2:
    reader = csv.reader(file1, delimiter=':')
    reader1 = csv.reader(file2, delimiter=':')

    for row in reader:
        for row1 in reader1:
            if row[0] in row1[0]:
                with open('file3.csv', "w", encoding='utf-8',newline='') as csv_file:
                    writer = csv.writer(csv_file, delimiter=':')
                    writer.writerow(row1)

示例代码工作..部分。我得到的结果只有一行,而有更多匹配项。我错过了什么?

编辑:我找到了 - 我错过break了第二个for循环之后:

if row[0] == row1[0]:
   writer.writerow(row1)
   break

标签: pythoncsv

解决方案


您每次都在重写输出文件。将“w”更改为“a+”:

用 open('file3.csv', "a+", encoding....


推荐阅读