Я озадачен с проблемой, показанной в примере ниже:маркировка дубликатов в файле CSV
"ID","NAME","PHONE","REF","DISCARD"
1,"JOHN",12345,,
2,"PETER",6232,,
3,"JON",12345,,
4,"PETERSON",6232,,
5,"ALEX",7854,,
6,"JON",12345,,
Я хочу, чтобы обнаружить дубликаты в колонке «PHONE», и отметьте последующие дубликаты с помощью колонки «REF », со значением, указывающим на„ID“из первого пункта, а значения„Да“для„колонок DISCARD“
"ID","NAME","PHONE","REF","DISCARD"
1,"JOHN",12345,1,
2,"PETER",6232,2,
3,"JON",12345,1,"Yes"
4,"PETERSON",6232,2,"Yes"
5,"ALEX",7854,,
6,"JON",12345,1,"Yes"
Итак, как я могу идти об этом? Я пробовал этот код, но моя логика была неправильной, конечно.
import csv
myfile = open("C:\Users\Eduardo\Documents\TEST2.csv", "rb")
myfile1 = open("C:\Users\Eduardo\Documents\TEST2.csv", "rb")
dest = csv.writer(open("C:\Users\Eduardo\Documents\TESTFIXED.csv", "wb"), dialect="excel")
reader = csv.reader(myfile)
verum = list(reader)
verum.sort(key=lambda x: x[2])
for i, row in enumerate(verum):
if row[2] == verum[i][2]:
verum[i][3] = row[0]
print verum
Ваше руководство и помощь будут очень признательны.
Вы, кажется, полагаетесь на точное соответствие, чтобы определить, являются ли два номера телефонов дублирующими. Это обычно только в классе. В реальном мире один и тот же номер телефона может быть записан 12345678, 1234-5678, 1234 5678, (555) 1234-5678, + 1-555-1234-5678 и т. Д. В США/Канаде/etc ... в других областях вводятся нулевые значения, например + 61-412-345-678 и (0412) 345-678 являются одним и тем же мобильным телефоном «сотовый» в Австралии. Также несколько человек могут использовать один и тот же номер мобильного телефона; вы уверены, что не должны проверять имя, прежде чем отказаться? –
Этот пример упрощен для моей потребности здесь. Данные прошли через чистку и нормализацию, и все данные по телефону находятся внутри страны.Я объясню реальный случай: У меня была база данных наших клиентов (компании) в электронной таблице Excel. Затем я вставил целую кучу записей из «Желтых страниц». В прошлом, когда был найден дубликат, мы просто исключили эту строку. Но теперь я пытаюсь использовать ссылки и флаг «отбрасывать», особенно для того, чтобы иметь записи, которые немного похожи. Я сначала делал это вручную, и мне потребовалось слишком много времени для около 6000 записей! – Eduardo
После первого тестирования телефона и анализа результатов я намерен использовать difflib.SequenceMatcher для поля адреса. В моих тестах он неплохо справился. – Eduardo