Я пытаюсь обнаружить ошибки в данных в CSV-файле, используя re.search, в котором неверные данные (не соответствующие заданному шаблону) будут отправлены в один список (ошибка), а правильные данные (которые соответствуютшаблон) будет отправлен в другой список (чистый)
Вот так выглядят данные в файле CSV
UES9151GS5 DEN PEK
UES915*GS5 JFK FCO
WYu2010YH8 ORD CAN
HCA3158QA6 ORD ~AN
HCA3158QA6 KUL A;S
HCA3158QA6 0 LHR
HCA3158QA6 A;S ORD
HCA3158QA6 ~AN PVG
, а это мой код
import csv
import re
clean = []
error = []
pid_pattern = '[A-Z]{3}[0-9]{4}[A-Z]{2}[0-9]'
dept_pattern = '[A-Z]{3}'
arr_pattern = '[A-Z]{3}'
with open(r"test.csv") as csvfile:
reader = csvfile
for i in reader:
pid = re.search(pid_pattern,i)
dept = re.search(dept_pattern,i)
arr = re.search(arr_pattern,i)
if pid !=None and dept != None and arr != None:
clean.append(i)
elif pid == None:
error.append(i)
elif dept == None:
error.append(i)
elif arr == None:
error.append(i)
Итак, после запуска кода я получаю
clean
['UES9151GS5,DEN,PEK\n',
'HCA3158QA6,ORD,~AN\n',
'HCA3158QA6,A;S,A;S,\n',
'HCA3158QA6,0,LHR\n',
'HCA3158QA6,A;S,ORD\n',
'HCA3158QA6,~AN,PVG\n']
error
['UES915*GS5,JFK,FCO\n',
'WYu2010YH8,ORD,CAN\n']
Видимо, код проверяет только первый столбец (pid) и игнорирует остальные.Ожидаемый результат должен быть таким:
clean
['UES9151GS5,DEN,PEK\n']
error
['HCA3158QA6,ORD,~AN\n',
'HCA3158QA6,A;S,A;S,\n',
'HCA3158QA6,0,LHR\n',
'HCA3158QA6,A;S,ORD\n',
'HCA3158QA6,~AN,PVG\n',
'UES915*GS5,JFK,FCO\n',
'WYu2010YH8,ORD,CAN\n']
До сих пор я не могу найти ошибку или найти какое-либо альтернативное решение.Спасибо за вашу помощь, я ценю это.