-1

I've seen many questions like this one here, but none of the solutions helped me. So lets say we have two csv files like this:

file1

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

file2

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

And the desired result is this: based on the number in the first column in file1 I need to get the row with the same starting number in file2 and write the matching values to file3 that should look like this:

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

I tried like this:

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)

The sample code works .. partially. The result I get is just one row while there are more matches. What am I missing?

EDIT: I found it - I was missing the break after the second for loop:

if row[0] == row1[0]:
   writer.writerow(row1)
   break
Tony
  • 618
  • 12
  • 27

1 Answers1

1

You are rewriting output file each time. Change "w" to "a+":

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

Bohdan
  • 753
  • 1
  • 9
  • 18