Search code examples
pythonlistcsvfile-read

Match data between two csv files and replace data


I have two csv files. First is like

a, right 
b, something 
c, right
d, something 

Second file

b,  wrong 
e, something 
a,  wrong 
d, something 

I want output like

b, right 
e,  something 
a, right
d, something 

I have tried this code

import csv

f1 = open("file1.csv")
f2 = open("file2.csv")

csv_f1 = csv.reader(f1)
csv_f2 = csv.reader(f2)

for row1 in csv_f1: 
    for row2 in csv_f2:
        if row1[0] == row2[0]:
            print row1[0], row1[1]
        else:
            print row2[0], row2[1]

Solution

  • If I understood you correctly. You need to compare the csvs line by line.

    In that case you can use zip in pythoonic way

    For loop looks like below

    for row1, row2 in zip(csv_f1, csv_f2): 
    

    Full code

    import csv
    
    f1 = open("file1.csv")
    f2 = open("file2.csv")
    
    csv_f1 = csv.reader(f1)
    csv_f2 = csv.reader(f2)
    
    for row1, row2 in zip(csv_f1, csv_f2): 
        if row1[0] == row2[0]:
            print(row1[0], row1[1])
        else:
            print(row2[0], row2[1])
    

    By the way. It is in python3. You seem to be using python2

    With zip_longest

    import csv, itertools
    
    f1 = open("file1.csv")
    f2 = open("file2.csv")
    
    csv_f1 = csv.reader(f1)
    csv_f2 = csv.reader(f2)
    
    for row1, row2 in itertools.zip_longest(csv_f1, csv_f2, fillvalue=[0, 0]):
        if row1[0] == row2[0]:
            print(row1[0], row1[1])
        else:
            print(row2[0], row2[1])