Попробуйте что-то вроде:
import csv
file_1_tuples = []
with open("file_1.csv") as fh:
csv_reader = csv.reader ( fh )
for row in csv_reader:
file_1_tuples.append( tuple(row) )
with open("file_2.csv") as fh:
csv_reader = csv.reader ( fh )
for row in csv_reader:
if tuple(row[0:3]) in file_1_tuples:
print ( row[3:6] )
При запуске со следующими данными:
file_1.csv
person, john, smith
person, anne, frank
person, bob, macdonald
fruit, orange, banana
fruit, strawberry, fields
fruit, ringring, banana
file_2.csv
person, john, smith, 1, 2, 3
person, anne, frank, 4, 5, 6
person, bob, macdonald, 7, 8, 9
выводит
[' 1', ' 2', ' 3']
[' 4', ' 5', ' 6']
[' 7', ' 8', ' 9']
РЕДАКТИРОВАТЬ: Немного более приятная реализация с использованием наборов и списков:
import csv, pprint
with open("file_1.csv") as fh:
csv_reader = csv.reader ( fh )
file_1_tuples = { tuple(row) for row in csv_reader }
with open("file_2.csv") as fh:
csv_reader = csv.reader ( fh )
matched_rows = [ row for row in csv_reader if (tuple(row[:3]) in file_1_tuples)]
pprint.pprint (matched_rows)
РЕДАКТИРОВАНИЕ 2: Обратите внимание, что эта реализация чувствительна к пробелам в файле CSV.Если интервал в вашем CSV-файле несовместим, используйте что-то вроде row = [element.strip(' ') for element in row]
, чтобы убрать все пробелы.