比较两个文件时忽略空行

时间:2016-03-09 15:39:38

标签: python

我有这个比较功能,它接收两个文件并逐行比较它们的内容。问题是,它不会忽略空行。所以如果我有以下作为File1

Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)        rxbytes    txbytes
tcp4       0      0  192.168.1.6.50860      72.21.91.29.http       CLOSE_WAIT         892        691
tcp4       0      0  192.168.1.6.50858      www.v.dropbox.co.https ESTABLISHED      27671       7563
tcp4       0      0  192.168.1.6.50857      162.125.17.1.https     ESTABLISHED      17581       3642

并将其与以下文件比较为File2

Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)        rxbytes    txbytes
tcp4       0      0  192.168.1.6.50860      72.21.91.29.http       CLOSE_WAIT         892        691




tcp4       0      0  192.168.1.6.50858      www.v.dropbox.co.https ESTABLISHED      27671       7563
tcp4       0      0  192.168.1.6.50857      162.125.17.1.https     ESTABLISHED      17581       3642

将空白行考虑在内,并将这些空行与file1中的内容进行比较。我尝试过使用strip(),但它会删除每个字符之间的所有空格,这是我不想要的。有没有办法只删除每一行后的空行?我突出了我的代码的相关部分。

def compare(baseline, newestFile):



    baselineHolder = open(baseline)
    newestFileHolder = open(newestFile)

    lines1 = baselineHolder.readlines()
    a = returnName(baseline)
    b = returnName(newestFile)

    for i,lines2 in enumerate(newestFileHolder):
            if not (isEmpty(baseline)) and not (isEmpty(newestFile)):
                if lines2 != lines1[i]:
                    add1 = i + 1
                    print ("line ", add1, " in newestFile is different \n")

2 个答案:

答案 0 :(得分:0)

做类似的事情:

def non_empty_readline(f):
    line = ""
    while not line:
       line = f.readline().strip()
    return line

然后从你的代码中调用这两个代码(你需要一种方法在空行上前进到下一行而不影响你的整体循环结构)。

答案 1 :(得分:0)

替换此行

for i,lines2 in enumerate(newestFileHolder):

for i,lines2 in enumerate(filter(lambda x: len(x) >0 , map(lambda x: x.strip(),newestFileHolder))):

地图编辑空白,过滤器删除那些空的行

同意@PeterWood评论difflib是一种更好的方式