从文本文件打印重复行然后删除除一个重复项之外的所有行?

时间:2014-03-19 17:13:14

标签: python file-io duplicate-removal

我有一个包含以下数据行的文本文件:

data123||data456
data146||data269
data123||data456
data697||data983
data123||data456

我想首先打印重复的行,以便我可以记录这些行是什么。然后我想创建一个新的文本文件,在其中删除原始文本文件中这些重复行的所有副本。

到目前为止,我有以下代码,但它似乎给了我重复的单个“数据###”而不是它包含的整个LINE。

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 :(得分: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)

答案 1 :(得分: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