我有这个比较功能,它接收两个文件并逐行比较它们的内容。问题是,它不会忽略空行。所以如果我有以下作为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")
答案 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是一种更好的方式