比较Python中的2个文件而忽略注释

时间:2011-11-28 21:44:10

标签: python

有没有一种简单的方法来比较Python中的2个文件而忽略某些行?我想忽略Python样式注释(以#开头的行)并检查所有其他行是否相同。我想总是逐行读取文件并手动比较。

2 个答案:

答案 0 :(得分:3)

首先从两个文件中删除注释。然后使用Differ比较生成的文件。

答案 1 :(得分:1)

您是否只想报告它们是相同还是不同?或者你也想知道它们不同的第一个地方,或者你想知道它们不同的所有地方?

我假设您想知道它们不同的第一行。首先,帮助函数读取非注释行,并包含行号信息:

def read_non_comment_lines(infile):
    for lineno, line in enumerate(infile):
        if line[:1] != "#":
            yield lineno, line

比较两个输入流并报告它们何时不同:

import itertools
with open(filename1) as f1:
    with open(filename2) as f2:
        for (lineno1, line1), (lineno2, line2) in itertools.izip(
                       read_non_comment_lines(f1), read_non_comment_lines(f2)):
            if line1 != line2:
                print "Different at %s:%d and %s:%d" % (filename1, lineno1+1, filename2, lineno2+1)
                break
        else:
            print "They are identical."