【问题标题】:How to remove duplicate lines - only in certain sections? Python 2.7.9如何删除重复行 - 仅在某些部分? Python 2.7.9
【发布时间】:2015-04-01 16:34:36
【问题描述】:

我正在尝试将 .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 个“标识符”。我想阅读这个文件,然后简单地删除重复的“DATA TWO:”s。虽然我熟悉如何简单地删除重复行,但我需要删除每个唯一部分的重复项,以产生:

IDENTIFIER: unique values

DATA ONE: more unique values

DATA TWO: more unique values

“DATA TWO:”的数量因标识符而异,通常是两个或三个。将“DATA TWO”中的哪一个打印到新文件中无关紧要;尽管每个措辞略有不同,但它们捕获了我我正在努力寻找,任何一个都足够了。

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

【问题讨论】:

    标签: python python-2.7 parsing duplicates extract


    【解决方案1】:
    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:
    

    【讨论】:

      【解决方案2】:

      您可以通过使用集合轻松做到这一点。例如,如果您有一个列表 [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)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-10
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        相关资源
        最近更新 更多