Python или bash: объединение двух CSV-файлов на основе нескольких совпадающих значений полей, форматирование и вывод CSV - PullRequest
1 голос
/ 11 марта 2012

Я бы предпочел, чтобы это было на Python, так как я больше работаю над изучением.Если вы можете оказать помощь в bash, это все равно будет полезно.

Я осмотрел Stack Overflow и нашел несколько полезных вещей, но мне не хватает, чтобы закончить это.

У меня естьдва CSV-файла с некоторыми общими полями.Данные не INT.Я хотел бы присоединиться на основе сопоставления 3 конкретных полей и записать его в новый output.csv, когда вся обработка будет завершена.

sourceA.csv выглядит следующим образом:

fieldname_1,fieldname_2,fieldname_3,fieldname_4,fieldname_5,fieldname_6,fieldname_7,fieldname_8,fieldname_9,fieldname_10,fieldname_11,fieldname_12,fieldname_13,fieldname_14,fieldname_15,fieldname_16

sourceB.csv выглядит следующим образом:

fieldname_4,fieldname_5,fieldname_OTHER,fieldname_8,fieldname_16

Как видите, sourceB.csv имеет 4 имени поля, которые также есть в sourceA.csv, и одно имя поля, которого нет.Данные в fieldname_OTHER должны заменить данные в sourceA[fieldname_6].

Весь процесс должен выглядеть следующим образом:

  • Заменить данные в sourceA[fieldname_6] наданные из sourceB[fieldname_OTHER], если соблюдены все следующие критерии:

    data in sourceA[fieldname_4]=sourceB[fieldname_4]
    
    data in sourceA[fieldname_8]=sourceB[fieldname_8]
    
    data in sourceA[fieldname_16]=sourceB[fieldname_16]
    

    (данные в sourceB[fieldname_5] оценивать не нужно.)

  • Если вышеуказанные критерии не выполняются, просто замените sourceA[fieldname_6] текстом ANY.

  • Запишите каждую обработанную строку в output.csv.

Пример того, что я хотел бы, чтобы вывод основывался на входных CSV и обработке, описанной выше:

dataA,dataB,dataC,dataD,dataE,dataOTHER,dataG,dataH,dataI,dataJ,dataK,dataL,dataM,dataN,dataO,dataP

Надеюсь, предоставленные мной данные не сделали его более запутаннымчем это должно быть.Спасибо за вашу помощь!

1 Ответ

1 голос
/ 11 марта 2012

Я не уверен, что буду беспокоиться об SQL для такого разового слияния, как это. Это просто в Python.

Считайте оба файла с помощью модуля csv, чтобы получить два списка. Индексируйте sourceA в словарь, ключом которого является кортеж полей, которые должны быть сопоставлены. Затем вы можете перебрать sourceB, мгновенно найти подходящую строку и слиться с ней из sourceB.

Когда вы закончите, вы можете просто вывести список , который вы прочитали из sourceA: dict и список указывают на те же значения, которые вы сейчас обновили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...