Выполните последовательную операцию 'diff' над файлами с использованием Python - PullRequest
0 голосов
/ 11 июня 2018

Предположим, у меня есть такой сценарий:

enter image description here

Моя конечная цель - сделать следующее (in_words, если изображение нечеткое):

1) Запустите команду linux "diff" между Master_File и файлом Slave_1, сохраните ее как Diff_1

2) Запустите команду linux "diff" между файлом Master_File и Slave_2, сохраните ее как Diff_2

3) Запустите команду linux "diff" между Master_File и файлом Slave_3, сохраните ее как Diff_3

4) Запустите команду linux "diff" между файлом diff_1 и diff_2, сохраните ее как Semi-Final-Diff

5) Запустите команду linux "diff" между Semi-Final-Diff и файлом diff_3 и сохраните ее как Final_Diff

Я пытался добиться этого с помощью метода «Reduce» от functools, но столкнулся с проблемами.

Допустим, я создал все начальные различия ...

from functools import reduce

total_diffs =  ['1','2','3']

def diff_major(a,b):
    out = run_os_command('diff -s '+str(a)+'_'+str(b)+' >diff_'+str(a)+str(b)+'.log')           

def diff_to_diff(total_diffs):
    d = []
    for i in total_diffs:
        d.append('diff_'+str(i)+'.log')
    print d
    reduce(diff_major, d)  

Я получаю вывод:

['diff_1.log', 'diff_2.log', 'diff_3.log']
Diffing diff_1.log and diff_2.log
Diffing None and diff_3.log

Почему он сдувается во втором diffи меняет имя на НЕТ?И как мне этого добиться?

1 Ответ

0 голосов
/ 11 июня 2018

diff_major возвращает None, поскольку у него нет оператора return.

reduce работает, беря первые 2 элемента в предоставленной итерации, в данном случае 1 и 2и предоставляя их в качестве входов для поставляемой функции с 2 параметрами.Он использует возврат из этой функции в качестве первого ввода для следующей итерации;затем он принимает следующий элемент в итерируемом, в данном случае 3, и предоставляет его в качестве второго ввода.Это повторяется до тех пор, пока итерация не будет исчерпана, и в этот момент она возвращает окончательное возвращенное значение из предоставленной функции.

...