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

python-递归比较两个目录并标记等效结构,python,performance,recursion,Python,Performance,Recursion,我已经阅读了stackoverflow中的许多问题,这些问题与python比较目录有关。然而,我现在的问题有点不同。 我有两个目录,其中包含两个不同版本的发行包内容。现在我想比较一下,以确保内容相同但是很少有文件嵌入了版本名。现在,哪种方法是比较它们并得出结论的最佳方法(除了版本差异,所有文件都匹配) 例如: 版本V1R1C1包含如下目录结构 pmt> find . -name "*" . ./c1 ./c1/c2 ./c1/c1_V1R1C1.cfg ./a1 ./a1/a1_V1R1

我已经阅读了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。多个读取/rip/compare必然会带来成本(特别是对于庞大的目录树结构)

我正在寻找比上述想法更简单、更有效的想法


附言:
1.如果有任何差异(除了与上述示例不同的版本),我想使用左/右等来获得差异列表。

2.我们可以假设这是两个目录中的版本名(如第一种情况下的V1R1C1和第二种情况下的V2R3C1)。

glob模块有一个迭代器函数(与列表生成相比),您可以在light for循环中使用它来迭代每个文件条目,然后将差异踢到单独的列表/字典中

这样,您就不会生成大量文件名,然后对它们进行筛选


使用集合比较如何

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

您是否想过只使用
diff
?这就是设计的目的。还有一些不同类型输出的Python实现。