从文本文件打印重复行,然后删除所有重复行中的多余行?
我有一个文本文件,里面有很多行数据,像下面这样:
data123||data456
data146||data269
data123||data456
data697||data983
data123||data456
我想先打印出重复的行,这样我就可以记录下这些行是什么。然后,我想创建一个新的文本文件,把原始文本文件中重复的行只保留一份,其他的都删掉。
到目前为止,我有以下代码,但它似乎只给我输出了单独的“data###”重复项,而不是它们所在的整行。
with open("file.txt") as f:
seen = set ()
for line in f:
line_lower =line.lower()
if line_lower in seen:
print (line)
else:
seen.add(line_lower)
2 个回答
0
直接打印出每一行其实并不复杂,所以我主要讲怎么在保持顺序的同时去掉重复的行:
from collections import OrderedDict
data = """data123||data456
data146||data269
data123||data456
data697||data983
data123||data456"""
uniq = OrderedDict((row, None) for row in data.splitlines()).keys()
在uniq
中,结果就是去掉重复行后的列表:
In [10]: print '\n'.join(uniq)
data123||data456
data146||data269
data697||data983
0
你可以使用一个集合:
s=set()
for line in open("file.txt"):
if line in s:
print line
else:
s.add(line)
然后重新写入文件:
with open("file.txt") as f:
for line in s:
f.write(line)