如何将一个文本文件与其他几个文本文件进行比较?

时间:2013-11-21 12:59:04

标签: python for-loop diff

我已经编写了下面的代码来比较文件“(F)和我路径中的其他几个文件。现在结果只显示一个文件的结果。任何建议如何进行比较并打印所有文件结果?

import difflib
import fnmatch
import os

filelist=[]
f= open("D:/Desktop/data/sample/ff69c.txt")
flines= f.readlines()
path="D:/Desktop/data/sample/sample2"
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()
   # g.close()
    d = difflib.Differ()
    diff_list = list(d.compare(flines, glines))

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

for diff_item in diff_list:
    if diff_item[0] == '+':
        n_adds += 1
    elif diff_item[0] == '-':
        n_subs +=1 
    elif diff_item[0] == ' ':
        n_eqs += 1
    else: 
        n_wiered += 1

print 'lines files #1: %d  #2: %d' % (len(flines), len(glines))
print 'adds: %d subs: %d eqs: %d ?:%d '  % (n_adds, n_subs, n_eqs, n_wiered)

2 个答案:

答案 0 :(得分:2)

每次读取文件都会覆盖

diff_list

尝试附加到diff_list而不是用这一行覆盖它:

diff_list = list(...)

答案 1 :(得分:1)

如果您只想比较文件,可以使用filecmp.cmp。它将避免使用readlines读取所有内容。文档:

  

filecmp.cmp(f1,f2 [,浅])

     

比较名为f1和f2的文件,   如果它们看起来相等则返回True,否则返回False。

     

除非给出浅并且为false,否则具有相同os.stat()的文件   签名被认为是平等的。除非os.stat()签名发生更改,否则不会再次比较使用此函数进行比较的文件。请注意,此功能不会调用任何外部程序   它的便携性和效率。

另外,要探索所有可以使用itertools.combinationsr=2}的文件组合:

  

itertools.combinations(iterable,r)

     

返回元素的r长度子序列   输入可迭代。

     

组合以字典排序顺序发出。所以,如果   输入iterable被排序,   组合元组将在   排序顺序。