在fi中打印不匹配(唯一)行

2024-03-29 08:51:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个函数,它打开一个文件(filename),打印每一行与前一行不同的文本(第一行总是被写入)。在输入文件中,每个输出行都应该以其行号作为前缀。你知道吗

我想出了以下方法,不管文本的最后一行是否重复,它都会一直打印出来:

def squeeze(filename):
    file = open(filename, 'r')
    prevline = ''
    line_num = 0
    for line in file:
        line_num = line_num + 1
        if line != prevline:
               print ('%3d - %s'%(line_num, line))  
        prevline = line

filename = 'Test.txt'
squeeze(filename)

我似乎不知道我的代码中的缺陷是在哪里和什么来修复这个问题?你知道吗

谢谢大家,都很有帮助,用勾了一个!你知道吗


Tags: 文件方法函数in文本fordefline
3条回答

对于以下文件,您的代码运行良好:

aajgs ajdgadyy
aajgs ajdgadyy
jagshdg ag
ajdgjga
adgha
adgha

输出为:

>>> squeeze(filename)
  1 - aajgs ajdgadyy

  3 - jagshdg ag

  4 - ajdgjga

  5 - adgha

因此,我建议对for循环进行两个修改:

for line in file:
        line = line.strip() # strip trailing and leading spaces
        if line == '': continue # Skip empty lines
        line_num = line_num + 1
        if line != prevline:
               print ('%3d - %s'%(line_num, line))  
        prevline = line

在完成一个循环时,请尝试使用列表存储行,然后在下一个循环中打印之前,请检查该行是否已存在于列表中。你知道吗

每一行都应该以换行符\n\r\n结尾。所以你的最后一行没有。你知道吗

您可以使用str.strip()删除它。你知道吗

with open(filename, 'r') as input_f:
    prevline = ''
    line_num = 0

    for line in input_f:
        line_num += 1
        if line.strip() != prevline.strip():     # use strip()
            print('%3d - %s' % (line_num, line))

        prevline = line

相关问题 更多 >