如何删除重复行 - 仅在某些部分? Python 2.7.9

How to remove duplicate lines - only in certain sections? Python 2.7.9

我正在尝试将 .txt 文件整合到数据的清理版本中。目前,该文件的结构如下:

IDENTIFIER: unique values

DATA ONE: more unique values

DATA TWO: more unique values

DATA TWO: more unique values

DATA TWO: more unique values

IDENTIFIER: unique values

DATA ONE: more unique values

DATA TWO: more unique values

DATA TWO: more unique values

IDENTIFIER:

依此类推,大约 ~500 'identifiers.' 我想阅读此文件,并简单地删除重复的 "DATA TWO:"。虽然我熟悉如何简单地删除重复行,但我需要删除每个唯一部分的重复项,以产生:

IDENTIFIER: unique values

DATA ONE: more unique values

DATA TWO: more unique values

"DATA TWO:'s varies per identifier, usually two or three. It does not matter which of the "DATA TWO 的数量”被打印到新文件中;虽然每个的措辞略有不同,但它们捕获了我试图找到的内容,任何一个都足够了。

我对编程比较陌生,使用 Python 2.7.9.

您可以使用集合轻松地做到这一点。例如,如果你有一个列表 [1,1,3,3,4,4],通过执行 set([1,1,3,3,4,4]) 你可以获得 [1,3,4] 这是一套。

>>> lines_lst = open('file.txt', 'r').readlines()
>>> lst_set = set(lines_lst)
>>> output  = open('cleanfile.txt', 'w')
>>> for line in lst_set:
        output.write(line)

请记住,此解决方案不保留顺序。

with open("input.txt") as f, open("out.txt", "w") as out::
    found = False
    for line in f:
        # new section always reset flag
        if line.startswith("IDENTIFIER:"):
            out.write(line)
            found = False
        # if first time we have seen DATA TWO write and set flag to true        
        elif line.startswith("DATA TWO:") and not found:
            out.write(line)
            found = True
        # ignore lines with "DATA TWO:" if we have already found one in the current section and continue
        elif line.startswith("DATA TWO:"):
            continue
        # else write the other lines in the section
        else:
            out.write(line)

使用您的示例输入的输出:

IDENTIFIER: unique values
DATA ONE: more unique values
DATA TWO: more unique values
IDENTIFIER: unique values
DATA ONE: more unique values
DATA TWO: more unique values
IDENTIFIER: