python递归比较两个目录并标记等价的structu

2024-10-02 04:37:21 发布

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

我在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可能包含以下结构

^{pr2}$

在上述情况下,程序必须将其标记为等价的结构。在

我能想到一些解决方案-例如,递归地将两个目录结构读入缓存(dict),翻录版本信息并进行比较等等,但是看起来并不是一个完全有效的机制,因为两个原因1。它没有使用内置的目录比较2,多次读取/删除/比较是有一定成本的(尤其是对于巨大的目录树结构)。在

我正在寻找的想法,是简单和有效的比上面的一个。在


附言:
1如果有任何差异(除了与上述示例不同的版本),我想使用左/右等来获得不同的列表。
2我们可以假设prefore hand是两个目录中的版本名(比如第一个是V1R1C1,第二个是V2R3C1)。在


Tags: 文件方法版本目录txta2内容a1
2条回答

可能你可以用一个单独的循环来迭代一个列表中的一个条目,或者在一个单独的列表中迭代一个列表。在

这样就不会生成大量的文件名,然后再进行筛选。在

http://docs.python.org/py3k/library/glob.html#module-glob

使用集合比较怎么样?在

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

相关问题 更多 >

    热门问题