连续执行'差异'使用Python对文件进行操作

时间:2018-06-11 09:42:41

标签: python diff

考虑我有这样的场景:

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

为什么它会在第二个差异中爆发并将名称更改为NONE?另外,我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

diff_major返回None,因为它没有return声明。

reduce通过获取提供的iterable中的前2项(在此实例中为12),并使用2个参数将它们作为输入提供给提供的函数。它使用此函数的返回值作为下一次迭代的第一个输入;然后它接受iterable中的下一个项目,在本例中为3,并将其作为第二个输入提供。这将重复,直到iterable耗尽,此时它将从提供的函数返回最终返回值。