如何在文本文件中找到重复的行并打印出来?

时间:2012-10-17 15:26:19

标签: python text

我有一个包含1,200行的文本文件。其中一些是重复的。

如何在文件中找到重复的行(但不要担心大小写),然后在屏幕上打印出行的文字,这样我就可以找到它了?我不想删除它们或任何东西,只是找到它们可能是哪一行。

3 个答案:

答案 0 :(得分:17)

使用套装非常简单:

with open('file') as f:
    seen = set()
    for line in f:
        line_lower = line.lower()
        if line_lower in seen:
            print(line)
        else:
            seen.add(line_lower)

答案 1 :(得分:5)

因为只有1200行,所以您也可以使用collections.Counter()

>>> from collections import Counter

>>> with open('data1.txt') as f:
...     c=Counter(c.strip().lower() for c in f if c.strip()) #for case-insensitive search
...     for line in c:
...         if c[line]>1:
...             print line
... 

如果data1.txt是这样的话:

ABC
abc
aBc
CAB
caB
bca
BcA
acb

输出为:

cab
abc
bca

答案 2 :(得分:1)

查找不区分大小写的重复项

这不会为您提供行号,但为您提供重复行列表,然后您可以进一步调查。例如:

tr 'A-Z' 'a-z' < /tmp/foo | sort | uniq -d

示例数据文件

# /tmp/foo
one
One
oNe
two
three

上面列出的管道将正确地产生:

  

一个

查找行号

然后你可以像这样grep寻找相关的行号:

grep --ignore-case --line-number one /tmp/foo