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

标签 python performance recursion

我已经在 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. 多次读取/撕裂/比较必然会产生成本(尤其是目录树结构巨大的情况下)。

我正在寻找比上述方法简单高效的想法。


附言:
1.如果有任何差异(除了与上面示例不同的版本),我想使用左/右等来获得差异列表。
2. 我们可以预先假设两个目录中的版本名称是哪个(如第一种情况下的 V1R1C1 和第二种情况下的 V2R3C1)。

最佳答案

使用集合比较怎么样?

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

关于python - 递归比较两个目录并标记等效结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036272/

相关文章:

python - 如何自动生成一两个词来代表一个主题?

java - 用Java设计高性能状态机

python - 如何在 python/OpenCV 中执行一系列非常大的图像平均?

java - Android Studio Activity 启动延迟

python - 为什么在递归情况下出现 "Function not Defined"错误?

python - opencv从哪里来的spyder

python - 将 A 类的实例分配给 A 类的成员是否为循环引用?

python - 从 Pandas 数据框列或行中获取列表?

c++ - 为什么我的删除节点功能不起作用?

java - 这个递归是如何工作的以及如何让它打印出根?