我有两个不同的目录,具有不同的目录树结构。目录A有一些文件在目录B中,反之亦然,我想确保文件大小相同,所以我知道哪个副本是正确的(如果它们不同,则更大的一个是我想要的那个)。这些文件大约1-2 GB。另外,这些目录有各种文件类型,我只想比较具有特定扩展名的目录。
如何比较相似文件的文件大小并输出匹配且不匹配的列表?
感谢:)
更新:对于模糊的问题,我很抱歉,我是新的堆栈溢出。我对此进行了更多的研究,并且能够弄明白。解决方案如下。对于此测试,有两个目录test1 /和test2 /都包含file1.txt和file2.txt。 file1.txt在两个目录之间是相同的,而file2.txt是不同的。
d1_contents = set(os.path.basename(x) for x in glob.glob("/Users/raycharles/Desktop/test1/*.txt"))
#print d1_contents
d2_contents = set(os.path.basename(x) for x in glob.glob("/Users/raycharles/Desktop/test2/*.txt"))
#print d2_contents
common = list(d1_contents & d2_contents)
common_files = [ f
for f in common
if os.path.isfile(os.path.join('/Users/raycharles/Desktop/test1/', f))]
print 'Common files:', common_files
# Compare the directories
match, mismatch, errors = filecmp.cmpfiles('/Users/raycharles/Desktop/test1/',
'/Users/raycharles/Desktop/test2/',
common_files, shallow=True)
match = sorted(match)
mismatch = sorted(mismatch)
errors = sorted(errors)
print 'Match:', match
print ""
print 'Mismatch:', mismatch
print ""
print 'Errors:', errors
print ""
这是输出:
Common files: ['file1.txt', 'file2.txt']
Match: ['file1.txt']
Mismatch: ['file2.txt']
Errors: []
答案 0 :(得分:1)
解决方案概要:
使用os.walk()
查找每个目录中的所有文件,将文件列表转换为集合,然后找到集合交集。
对于交集中的每个文件,使用os.stat()
获取其大小(实际上,每个副本获得两个大小)。比较尺寸。