Это звучит как подкаталоги n5/N51
и n51/N5
присутствуют только в одном месте (нет n5/N5
каталога, ни n51/N51
). Сравнение с dircmp
не рекурсирует в эти каталоги, поскольку он заранее знает, что каждый файл будет непревзойденным.
Если это не то, что вы хотите, вы должны, вероятно, рассматривать непревзойденные каталоги по-разному от непревзойденных обычных файлов, используя os.walk
для проверки их содержимого. Попробуйте что-то вроде этого:
def dir_comp(dir1, dir2):
filecmp.clear_cache()
DirComp = filecmp.dircmp(dir1, dir2)
for item in DirComp.left_only:
path = os.path.join(dir1, item)
if os.path.isdir(path):
for base, subdirs, files in os.walk(path):
print("Folder", base, "exists only in", dir1)
for file in files:
print("File", os.path.join(base, file), "exists only in", dir1)
else:
print('File', path, 'exist only in', dir1)
for item in DirComp.right_only:
path = os.path.join(dir2, item)
if os.path.isdir(path):
for base, subdirs, files in os.walk(path):
print("Folder", base, "exists only in", dir2)
for file in files:
print("File", os.path.join(base, file), "exists only in", dir2)
else:
print('File', os.path.join(path), 'exist only in', dir2)
for CommonDirs in DirComp.common_dirs:
new_dir1 = os.path.join(dir1, CommonDirs)
new_dir2 = os.path.join(dir2, CommonDirs)
dir_comp(new_dir1, new_dir2)
Это должно напечатать все файлы, которые существуют только в одной папке (даже если они находятся в каталоге, который существует только в том, что один). Обратите внимание, что объект DirComp
, который вы получаете, уже имеет информацию, необходимую для вашей рекурсии, на CommonDirs
. Проверьте его атрибут subdirs
. Вы можете реорганизовать свой код, чтобы вы только один раз вызывали filecmp.dircmp
, а затем передавали результаты в рекурсивную функцию для их распечатки.