从文本文件打印重复行,然后删除所有重复行中的多余行?

0 投票
2 回答
1026 浏览
提问于 2025-04-17 23:00

我有一个文本文件,里面有很多行数据,像下面这样:

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)

撰写回答