为什么这个目录比较程序没有检测到额外的文件?

2024-05-19 20:53:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个目录比较程序(基于docs-https://docs.python.org/3/library/filecmp.html)中给出的例子,它没有找到一个额外的文件,我把它放在一个子目录中来测试它。该计划是:

import sys
from filecmp import dircmp

def print_diff_files(dcmp):
    for name in dcmp.diff_files:
        print("diff_file %s found in %s and %s" % (name, dcmp.left, dcmp.right))
    for sub_dcmp in dcmp.subdirs.values():
        print_diff_files(sub_dcmp)

dcmp = dircmp(sys.argv[1], sys.argv[2]) 
print_diff_files(dcmp)
print(dcmp.left_only)
print(dcmp.right_only)

右边的“仅限于”列表中应该包含一些内容,但它只是[]。为什么会这样?在


Tags: nameinimportrightdocsforsysdiff
2条回答

filecmp.dircmp不递归比较文件。如果您希望dircmp.left_only和{}是递归的,那么您必须像处理dircmp.diff_files一样自己执行。在

将您的print(dcmp.left_only)print(dcmp.right_only)移到递归函数print_diff_files内:

import sys
from filecmp import dircmp

def print_diff_files(dcmp):
    for name in dcmp.diff_files:
        print("diff_file %s found in %s and %s" % (name, dcmp.left, dcmp.right))
    if dcmp.left_only:
        print('%s: %s ' % (dcmp.left, dcmp.left_only))
    if dcmp.right_only:
        print('%s: %s ' % (dcmp.right, dcmp.right_only))
    for sub_dcmp in dcmp.subdirs.values():
        print_diff_files(sub_dcmp)

dcmp = dircmp(r'c:\temp\t', r'c:\temp\s')
print_diff_files(dcmp)

我对blhsing的程序做了一些小的修改,如图所示:

#diffdir.py - compares directories and lists shallow differences; use python3
import sys
from filecmp import dircmp

def print_diff_files(dcmp):
    for name in dcmp.diff_files:
        print("\nDiff file: %s found in %s and %s" % (name, dcmp.left, dcmp.right))
    for sub_dcmp in dcmp.subdirs.values():
        print_diff_files(sub_dcmp)
    if dcmp.left_only:
        print("\nLeft only:", dcmp.left_only)
    if dcmp.right_only:
        print("\nRight only:", dcmp.right_only)

dcmp = dircmp(sys.argv[1], sys.argv[2]) 
print_diff_files(dcmp)
print()

相关问题 更多 >