删除跨越多行

时间:2016-05-04 16:40:30

标签: python algorithm python-2.7 python-3.x

请帮我解决问题。 我有一个大文本文件,我必须删除重复的行。 问题是有时复制跨越多行 例如,前两行是唯一的,它们重复三次。 我必须删除这对重复的行。 我必须删除重复项,只要它们一个接一个地出现。 在出现其他一些行之前满足条件, 这意味着我们必须重新开始检查将重复的唯一线的数量。

测试数据

测试线1
测试线2
测试线1
测试线2
测试线1
测试线2

其他一些行   
...............................

测试线1
测试线2
测试线3

其他一些行   
...............................

测试线1
测试线2
测试线3
测试线1
测试线2
测试线3
测试线1
测试线2
测试线3

其他一些行   
...............................

测试线1
测试线1
测试线1

其他一些行   
...............................

测试线1
测试线2
测试线3
测试线4
测试线1
测试线2
测试线3
测试线4

其他一些行   
...............................

预期结果

测试线1
测试线2

其他一些行   
...............................

测试线1
测试线2
测试线3

其他一些行   
...............................

测试线1
测试线2
测试线3

其他一些行   
...............................

测试线1

其他一些行   
...............................

测试线1
测试线2
测试线3
测试线4

其他一些行   
...............................

Jim Mischel感谢您澄清我的问题。我明白我做了一个不容易理解的例子。我知道我们可以使用set进行过滤,但它不是我需要的。
我需要 - 删除相邻的重复行和行序列。
我正在尝试将1,1更改为1,将1,2,1,2,1,2更改为1,2,但1,2,3,1,2不会更改。 请 note 重复行数可以不同。 它可以是1,2,1,2,1,21,21,2,3,1,2,3,1,2,31,2,31,2,3,4,1,2,3,4,1,2,3,41,2,3,4

3 个答案:

答案 0 :(得分:0)

使用正则表达式将多行重复减少为单例:

import sys
import re

string = sys.stdin.read()

# use pattern matching to reduce the repeated line sequences:
# ie. does a line look like the one that follows it; does a 
# pair of lines look like the pair that follow them; etc.
string = re.sub(r"((?:^.*\n)+)(?=\1)", "", string, flags=re.MULTILINE)

sys.stdout.write(string)

<强> INPUT

Test line 1
Test line 2
Test line 1
Test line 2
Test line 1
Test line 2

Some other lines 1
...............................

Test line 1
Test line 2
Test line 3

Some other lines 2
...............................

Test line 1
Test line 2
Test line 3
Test line 1
Test line 2
Test line 3
Test line 1
Test line 2
Test line 3

Some other lines 3
...............................

Test line 1
Test line 1
Test line 1

Some other lines 4
...............................

Test line 1
Test line 2
Test line 3
Test line 4
Test line 1
Test line 2
Test line 3
Test line 4

Some other lines 5
...............................

<强>输出

Test line 1
Test line 2

Some other lines 1
...............................

Test line 1
Test line 2
Test line 3

Some other lines 2
...............................

Test line 1
Test line 2
Test line 3

Some other lines 3
...............................

Test line 1

Some other lines 4
...............................

Test line 1
Test line 2
Test line 3
Test line 4

Some other lines 5
...............................

答案 1 :(得分:-1)

为避免重复,您可以使用集合:

>>> l = [1,2,3,3,2,1,2,4]
>>> set(l)
set([1, 2, 3, 4])

你只需要识别&#34;其他一些行&#34;开始在列表中排队。

答案 2 :(得分:-2)

您可以使用SET

list_of_lines = ["line 1", "line 2", "line 3", "line 1", "line 2"]
list_of_lines = list(set(list_of_lines))

或者你可以在集合中添加你的行。

list_of_lines = set()
set.add("line 1")
set.add("line 2")
set.add("line 3")

它会自动删除重复项