如何在Python中将两个目录中的所有文件相互比较?

时间:2013-12-02 16:00:40

标签: python directory compare

我有一个目录,我想比较其中的所有文件,并获得它们之间匹配的百分比。作为起点,我决定打开一个文件并将其他文件与那个文件进行比较:

filelist=[]
diff_list=[]
f= open("D:/Desktop/sample/ff69.txt")
flines= f.readlines()
path="D:/Desktop/sample"
for root, dirnames, filenames in os.walk(path):  
    for filename in fnmatch.filter(filenames, '*.txt'):   
        filelist.append(os.path.join(root, filename))


for m in filelist:
    g = open(m,'r')
    glines= g.readlines()



    d = difflib.Differ()
    #print d
    diffl= diff_list.append(d.compare(flines, glines))


print("".join(diff))#n_adds, n_subs, n_eqs, n_wiered = 0, 0, 0, 0
#

但我的代码不起作用,这意味着当我打印它时,我得到“无”。任何有任何想法的原因?或者更好地了解两个目录中所有文件的比较?

1 个答案:

答案 0 :(得分:2)

如果你试图成对地比较文件,你可能想要更接近这个:

files = os.listdir('root')
for idx, filename in enumerate(files):
  try:
    fcompare = files[idx + 1]
  except IndexError:
    # We've reached the last file.
    break
  # Actual diffing code.
  d = difflib.Differ()
  lines1 = open(filename).readlines()
  lines2 = open(fcompare).readlines()
  d.compare(lines1, lines2)

那将比较文件1-2,2-3,3-4等。当你读取文件时可能值得优化 - 文件2用于循环迭代1和2 - 所以不应该有如果可能,其内容读取两次,但这可能是过早优化,具体取决于文件的大小。