Сверка двух таблиц · Шаг 3 из 4
Что изменилось в строке
Самое ценное в сверке — у кого что поменялось: должность, оклад, отдел. Но учётная программа выгружает оклад то как 85000, то как 85 000,00, а в столбце vygruzheno у каждой строки своя дата выгрузки. Если считать это изменениями, в отчёте утонет всё настоящее.
Что сделать
Для строк, которые есть в обеих таблицах, найдите столбцы, где значение изменилось; числа сравнивайте как числа.
Что приходит
starayaиnovaya— две таблицы словарями «ключ → строка», как их вернул шаг 1ne_sravnivat— список столбцов, которые сравнивать не нужно:["vygruzheno"]
Что вернуть
Список пар (ключ, [(столбец, было, стало), …]) по порядку старой таблицы — только строки, где что-то изменилось.
Допишите функцию izmeneniya_strok в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В проекте
Программа передаёт этот список в отчёт — шаг 4, а с ключом --v записывает каждое расхождение строкой таблицы, которую можно открыть в Excel.
staraya = {("1043",): {"tabel": "1043", "fio": "Иванова А. С.", "dolzhnost": "бухгалтер", "oklad": "85000"},
("1044",): {"tabel": "1044", "fio": "Петров В. В. ", "dolzhnost": "водитель", "oklad": "60000"}}
novaya = {("1044",): {"tabel": "1044", "fio": "Петров В. В.", "dolzhnost": "водитель", "oklad": "60000"},
("1043",): {"tabel": "1043", "fio": "Иванова А. С.", "dolzhnost": "главный бухгалтер", "oklad": "95000"}}
izmeneniya_strok(staraya, novaya, [])
[(('1043',), [('dolzhnost', 'бухгалтер', 'главный бухгалтер'), ('oklad', '85000', '95000')])]
- Строки — по порядку ключей
staraya; ключи, которых нет вnovaya, пропускаются (это «пропало» из шага 2). - Столбцы — по порядку столбцов старой строки; сравниваются только те, что есть в обеих строках и нет в
ne_sravnivat. - Как сравнивать. У значения убираются пробелы по краям,
None— пустая строка. Если после удаления всех пробелов (и неразрывных) значение — число: необязательный минус, цифры, необязательная запятая или точка и снова цифры — сравниваются числа:85000,85 000,00и85000.0равны. Ноль впереди целой части (0012,007) — это код, а не число: такие значения сравниваются как текст.0,5— число. Остальное сравнивается как текст, с учётом больших и маленьких букв. - В тройке
(столбец, было, стало)— значения без пробелов по краям,None— как"".
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.