递归比较两个目录并标记等效结构

提问

我在stackoverflow中阅读了许多有关python比较目录的问题.但是,我当前的问题有点不同.
我有两个目录,其中包含两个不同的版本发行包内容.现在,我想进行比较以确保内容相同.但是,很少文件具有嵌入其中的版本名称.现在,这是比较它们并得出结论的最佳方法(版本差异除外,所有文件都匹配).

例如:
版本V1R1C1包含以下目录结构

pmt> find . -name "*"
.
./c1
./c1/c2
./c1/c1_V1R1C1.cfg
./a1
./a1/a1_V1R1C1.cfg
./a1/a2
./a1/a2/a1a2_V1R1C1.cfg
./b1/a_best_file.txt
./b1/b2/a_test_file.txt
./b1/b2/b1b2_V1R1C1.cfg
./a_V1R1C1.cfg

版本V2R3C1可能包含以下结构

pmt> find . -name "*"
.
./c1
./c1/c2
./c1/c1_V2R3C1.cfg
./a1
./a1/a1_V2R3C1.cfg
./a1/a2
./a1/a2/a1a2_V2R3C1.cfg
./b1/a_best_file.txt
./b1/b2/a_test_file.txt
./b1/b2/b1b2_V2R3C1.cfg
./a_V2R3C1.cfg

在上述情况下,程序必须将其标记为等效结构.

我可以想到几种解决方案-例如,将目录结构递归地读入缓存(dict),提取版本信息并进行比较等.但是由于两个原因,它看起来似乎不是一种完全有效的机制:1.它没有利用内置目录比较2.多次读取/复制/比较必然会产生成本(尤其是巨大的目录树结构).

我正在寻找比上述方法简单有效的想法.

PS:
1.如果有任何差异(版本与上面的示例不同),我想使用向左/向右等获取差异列表.
2.我们可以事先假设这是两个目录中的版本名称(如第一种情况下为V1R1C1,第二种情况下为V2R3C1).

最佳答案

使用集比较怎么样?

set((remove_version(filepath) for filepath in iter_file(dic1))) == set((remove_version(filepath) for filepath in iter_file(dic2)))