У меня есть два файла, которые выглядят, как это с некоторыми различиями между ними:получать минимальные значения элементов с одинаковым идентификатором, если разница существует?
Первый файл:
{16:[3, [-7, 87, 20, 32]]}
{17:[2, [-3, 88, 16, 28], 3, [-6, 84, 20, 32]]}
{18:[2, [-1, 88, 16, 28], 3, [-3, 84, 20, 32]]}
{19:[2, [1, 89, 16, 28], 3, [-2, 85, 20, 32]]}
{20:[2, [9, 94, 16, 28], 3, [1, 85, 20, 32]]}
{21:[2, [12, 96, 16, 28], 3, [2, 76, 19, 31]]}
{22:[2, [15, 97, 16, 28], 3, [4, 73, 19, 29]]}
{23:[2, [18, 96, 16, 28], 3, [6, 71, 19, 29], 10, [-10, 60, 51, 82]]}
{24:[2, [22, 97, 16, 28], 3, [9, 71, 19, 27], 10, [-5, 63, 49, 78]]}
{25:[2, [25, 99, 16, 28], 3, [13, 71, 17, 26], 10, [-1, 64, 46, 77]]}
{26:[2, [29, 101, 16, 28], 3, [17, 70, 16, 25], 10, [-1, 65, 45, 77]]}
Второй файл:
{16:[3, [-7, 86, 20, 32]]}
{17:[2, [-3, 82, 16, 28], 3, [-6, 84, 20, 32]]}
{18:[2, [-1, 88, 16, 27], 3, [-3, 84, 20, 32]]}
{19:[2, [1, 89, 16, 28], 3, [-2, 84, 20, 32]]}
{20:[2, [9, 94, 15, 28], 3, [1, 85, 20, 32]]}
{21:[2, [12, 96, 16, 28], 3, [1, 76, 19, 31]]}
{22:[2, [15, 97, 17, 28], 3, [4, 73, 19, 29]]}
{23:[2, [18, 96, 18, 28], 3, [6, 71, 19, 29], 10, [-10, 60, 51, 82]]}
{24:[2, [22, 97, 16, 28], 3, [9, 71, 20, 27], 10, [-5, 63, 49, 78]]}
{25:[2, [25, 99, 16, 28], 3, [13, 71, 17, 26], 10, [-1, 64, 46, 77]]}
{26:[2, [29, 101, 17, 28], 3, [17, 70, 16, 25], 10, [-1, 65, 45, 77]]}
Я сравниваю их обоих, используя difflib и распечатывать линии, которые имеют в них разницу. То, что я пытаюсь сделать, это распечатать минимальные и максимальные значения frame
, которые разделяют одинаковые id
.
Рамка является ключом в каждой строке, поэтому в этом случае рамки в диапазоне от 16
до 26
. Идентификатор - это значение, которое предшествует каждому списку из 4 значений. Таким образом, идентификатор на первой строке - 3
. Вторая строка имеет два идентификатора: 2
, а затем 3
.
Так пример того, что я хотел бы, чтобы написать это:
17 - 36
при условии, что один из frames
, разделяющего идентификатора 3
отличается от файла, который я сравниваю с.
Для каждого отличия мне нужно записать новый файл, содержащий только начальный кадр и конечный кадр, тогда я буду работать над объединением дополнительных строк в каждый файл.
это текущее использование difflib, который печатает каждую строку, которая имеет разные:
def compare(f1, f2):
with open(f1+'.txt', 'r') as fin1, open(f2+'.txt', 'r') as fin2:
diff = difflib.ndiff(fin1.readlines(), fin2.readlines())
outcome = ''.join(x[2:] for x in diff if x.startswith('- '))
print outcome
Как бы я быть в состоянии добиться того, что я описал выше настройки этого исполнения блока?
Обратите внимание, что оба файла имеют один и тот же номер frame
, но не тот же id
s, поэтому мне нужно было написать два разных файла для каждой разницы, возможно, в папку. Поэтому, если два файла имеют 20 отличий, мне нужно иметь две основные папки по одному для каждого исходного файла, каждый из которых содержит текстовые файлы для каждого начала и конца frame
того же идентификатора.
Это очень полезно, спасибо большое! Тем не менее, я не понимаю, что такое «s» в третьей строке »для строки в s.split ('\ n'): – MaxPower
О, да, извините :-) 's' - это просто большая строка, содержащая все строки, которые вы показываете в начале, это означает список различий. – Emmanuel
Мое редактирование показывает полное решение, надеюсь, что это то, что вам нужно ... – Emmanuel