Задать вопрос
@Sheryorg

Как сравнить два файла в Python и добавить недостающие элементы?

Доброго времени суток.
Есть два файла. Первый 1.csv:
template1;NEW;1000
template2;OLD;1010
template3;OLD;1020
template4;OLD;1000


Второй 2.csv:
template1;OLD;1000
template2;NEW;1030
template5;OLD;1020
template6;OLD;1010


ПРобую с помощью этого скрипта
b = []
for tom in open('1.csv', 'r'):
    tom1, tom2, tom3 = tom.split(';')
    for fin in open('2.csv', 'r'):
        fin1, fin2, fin3 = fin.split(';')

        if tom1 == fin1 and tom2 == fin2:
            b.append(tom1 + ';' + tom2 + ';' + str(int(tom3) + 1) + '\n')
            break
        elif tom1 == fin1 and tom2 != fin2:
            b.append(tom1 + ';' + fin2 + ';1000\n')
            break

for i in b:
    print(i)

сделать слияние двух файлов, выводит
template1;OLD;1000
template2;NEW;1000

если добавляю еще одно условие
elif tom1 != fin1 and tom2 != fin2:
            b.append(fin1 + ';' + fin2 + ';1000\n')
            break

получаю
template1;OLD;1000

template2;NEW;1000

template2;NEW;1000

template2;NEW;1000


Подскажите пожалуйста как мне обработать эти два файла так, чтоб все записи отсутствующие в первом файле очутились во втором?
  • Вопрос задан
  • 5424 просмотра
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
winordie
@winordie
Лучшая документация -- исходники
Дополню. UPDATE: так короче
result = {}
for tom in open('k1.csv', 'r'):
    t1, t2, t3 = tom.replace('\n', '').split(';')
    result[t1] = (t2, t3)

for tom in open('k2.csv', 'r'):
    t1, t2, t3 = tom.replace('\n', '').split(';')
    if t1 not in result.keys():
        result[t1] = (t2, t3)

for k in result.keys():
    print('{}: {}'.format(k, result[k]))

Задание выполняется
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Sheryorg Автор вопроса
Должно получиться
template1;NEW;1000
template2;OLD;1010
template3;OLD;1020
template4;OLD;1000
template5;OLD;1020
template6;OLD;1010

т.е. все то что отсутствовало в первом файле должно быть доболнено из второго.
Ответ написан
Комментировать
@yuliymo
for line in open("file2"):
    if line not in open("file1"):
        open("file1","a").write(line)
Ответ написан
Комментировать
kivsiak
@kivsiak
software engineer
А еще есть замечтаельные баттарейки

https://docs.python.org/2/library/difflib.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы