我试图创建一个打开文件(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)
我似乎无法弄清楚我的代码中的缺陷在哪里以及修复了什么?
谢谢,非常有帮助,使用勾选的一个!
答案 0 :(得分:1)
每一行都应以换行符\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
答案 1 :(得分:0)
在完成一个循环之后尝试使用列表存储该行,然后在下一个循环中打印之前检查该行是否已存在于列表中。
答案 2 :(得分:0)
最后一行与最后一行之间的差异是最后一行末尾缺少的新行字符。这是一种可以解决这个问题的方法:
def squeeze(filename):
file = open(filename, 'r')
prevline = ''
line_num = 0
for line in file:
line_num = line_num + 1
trimmed_line = line.strip()
if trimmed_line != prevline:
print ('%3d - %s'%(line_num, trimmed_line))
prevline = trimmed_line
filename = 'Test.txt'
注意:strip()
将从末尾删除所有空格。如果这不是您想要的,请考虑使用.replace('\n', '')
代替。
答案 3 :(得分:0)
您的代码可以正常使用以下文件:
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