2012-08-16 55 views
1

我试图使用dircmp功能蟒蛇来比较两个目录递归Python函数的返回值的简单列表创建从

def cmpdirs(dir_cmp): 
    for sub_dcmp in dir_cmp.subdirs.values(): 
     cmpdirs(sub_dcmp) 
    return dir_cmp.left_only, dir_cmp.right_only, dir_cmp.common_files 

if __name__ == '__main__': 
    dcmp = dircmp('dir1', 'dir2') 
    result = list(cmpdirs(dcmp)) 

我试图得到这样一个结果:

([file1,file2],[file3,file4],[file5,file6]) 

这样做的最好方法是什么?

+0

你试图改变'return'到'yield'? – 2012-08-16 23:20:29

+0

我做了,但结果不是3个列表的元组。 – arjunurs 2012-08-16 23:35:23

回答

1

之前从未使用过dircmp ...但我认为这应该工作,寻找你的代码...

def cmpdirs(dir_cmp): 
    # make copies of the comparison results 
    left = dir_cmp.left_only[:] 
    right = dir_cmp.righ_only[:] 
    common = dir_cmp.common_files[:] 

    for sub_dcmp in dir_cmp.subdirs.values(): 
     sub_left, sub_right, sub_common = cmpdirs(sub_dcmp) 

     # join the childrens results 
     left += sub_left 
     right += sub_right 
     common += sub_common 

    # return the merged results 
    return (left, right, common) 

if __name__ == '__main__': 
    dcmp = dircmp('dir1', 'dir2') 
    result = cmpdirs(dcmp) 
+0

谢谢。这样可行。 – arjunurs 2012-08-17 00:24:50