簡體   English   中英

比較兩個 csv 文件並將匹配的條目寫入第三個文件 python

[英]Compare two csv files and write the matching entries in third file 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)

示例代碼工作..部分。 我得到的結果只有一行,而有更多匹配項。 我錯過了什么?

編輯:我找到了 - 在第二個for循環之后我錯過了break

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

您每次都在重寫 output 文件。 將“w”更改為“a+”:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM