比较文件名上的目录

时间:2015-05-21 13:13:39

标签: python directory compare filenames

我需要比较两个目录A和B的文件名。

A包含的文件多于B(分别约为15000/20000),具有相同的名称/不同的内容。

我有:

dirA: var options = { width: 400, height: 240, colors: ['#e0440e', '#e6693e', '#ec8f6e', '#f3b49f', '#f6c7b6'] };

dirB: NSRegularExpression

我需要dirA-dirB中的所有文件(来自dirA):

diffAB: \p{script=Han}

我试过了:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\p{script=Han}" options:NSRegularExpressionCaseInsensitive error:nil];
if ([regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])] > 0) {
    // string contains Chinese characters
}

没用。 'a'包含B中的所有文件,而不仅仅是A-B。

我还试图遍历这两个目录并创建文件集但是也没有工作(再次来自B的所有文件)。

感谢您的帮助

4 个答案:

答案 0 :(得分:4)

您可以使用set来以这种方式获取文件的差异。

import os
from os.path import isfile
list_A = [x for x in os.listdir(dirA) if isfile(x)]
list_B = [x for x in os.listdir(dirB) if isfile(x)]
diff = set(list_A) - set(list_B)

答案 1 :(得分:1)

在最后一个for循环中,您编写了fpa.keys()而不是fpA.keys()fpb.keys()而不是fpB.keys()。使用适当的变量名称,它将起作用。它对我有用。

答案 2 :(得分:1)

这个怎么样?

>>> from os import listdir
>>> set(listdir(dirA)).difference(listdir(dirB))

os.listdir获取当前目录下的所有文件,然后使用set.difference()来获取dirA的差异,但不是dirB中的差异。

答案 3 :(得分:0)

您需要在路径名中转义反斜杠!并且 - 按照建议 - 将fpa重命名为fpA,将fpb重命名为fpB。那么你的例子就可以了。

import os
from os.path import join

fpA = {}
for root, dirs, files in os.walk('C:\\A\\docs'): # <- escape backslash
    for name in files:
        fpA[name] = 1
fpB = {}
for root, dirs, files in os.walk('C:\\B\\docs'): # <- escape backslash
    for name in files:
        fpB[name] = 1

a = []
for name in fpA.keys():
    if not(name in fpB.keys()):
        a.append(name)