Python фильтр записей из CSV-поиска другого CSV - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь создать CSV-файл, назовем его File- C, просматривая некоторые «идентификаторы» из File-A в File-B.

If File-B has the 'ID' from File-A 
      THEN put the record in File-C.

Файл поиска имеет следующий формат csv:

File-A
ID,incr,event
1111.1234557,5,missing create

Файл данных имеет атрибут 'ID' и другие атрибуты:

File-B
ID,incr,name,email,accountno
1111.1234557,5,john,emailaddress,22020233902

Выходные данные или File- C будут точно такими же, как файл данных, но с меньшим количеством записей, поскольку они были отфильтрованы на основе того, что мы нашли в файле поиска.

Я написал приведенный ниже код, и он дает ошибка «индекс вне диапазона». У меня есть ощущение, что это связано с размером двух списков, которые проходят через. Я не знаю, как они связаны.

def read_from_file(csv_file):
    with open(csv_file, 'rt') as f:
        file_reader = csv.reader(f)
        next(file_reader, None)
        data = list(file_reader)
    return data


data_file= read_from_file('/CSV_RECORDS_20200308_A.csv')
lookup_file= read_from_file('/CSV_RECORDS_20200308_B.csv')

output_data = []

for row in lookup_file:
    for val in data_file:
        if row[0] == val[0]: ## FAILES HERE WITH ERROR 'IndexError: list index out of range'##
            output_data.append(row)


with open('/INSERTBACK_TEST.csv', 'wb') as f:
    writer = csv.writer(f)
    writer.writerows(output_data)

Полное сообщение об ошибке:

Traceback (последний последний вызов):

runtime_1 | Файл "/opt/project/etl/landing/unibanks/code.py", строка 102, в

runtime_1 | если строка [0] == val [0]:

runtime_1 | IndexError: список индексов выходит за пределы диапазона

Я не могу понять это. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 марта 2020

Ошибка говорит о том, что у вас есть какой-то пустой список, прочитанный из одного из файлов.

val = []
print(val[0])
>>out
>>list index out of range

Проверьте, что в ваших файлах есть пустые строки.

...