Python 如何在文本文件中找到重复行并打印它们?

Python 如何在文本文件中找到重复行并打印它们?,python,text,Python,Text,我有一个大约1200行的文本文件。其中有些是重复的 我怎样才能在文件中找到重复的行(但不必担心大小写),然后在屏幕上打印出行的文本,这样我就可以找到它了?我不想删除它们或任何东西,只要找出它们可能是哪一行就行了。这对于一个集合来说非常简单: with open('file') as f: seen = set() for line in f: line_lower = line.lower() if line_lower in seen:

我有一个大约1200行的文本文件。其中有些是重复的


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

这对于一个集合来说非常简单:

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)

因为只有1200行,所以您也可以使用
集合。计数器()

如果
data1.txt
是这样的:

ABC
abc
aBc
CAB
caB
bca
BcA
acb
输出为:

cab
abc
bca
查找不区分大小写的重复项 这不会给你行号,但会给你一个重复行的列表,你可以进一步调查。例如:

tr 'A-Z' 'a-z' < /tmp/foo | sort | uniq -d
上面列出的管道将正确地产生:

一个

查找行号 然后,您可以grep查找相关行号,如:

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

@放松--很抱歉回滚您的编辑。我注意到我的代码中有一个缩进错误,您显然也漏掉了,出于某种原因,我认为您添加了它:p。。。不管怎样,现在一切都很好,我已经合并了您的更改。我没有尝试删除这段代码,但您是否需要执行类似于f.read()或f.readlines()的操作,而不是只执行f?@tehmisvh--no<代码>文件对象是迭代器。您可以直接对它们进行迭代。:)如果你问我,这是一个非常酷的设计决策。请注意,如果一行出现三次,它将在结果中打印两次。这可能不是问题。巨大的空白是空行。由于空行多次出现,因此它们将被打印。若要禁止该操作,请将if语句更改为
if line\u lower in seen和line\u lower.strip():
。如果不是line.strip():continue,则添加为for语句的第一行。您知道如何(1)从文件中获取行(2)比较字符串吗?如果两者都是肯定的,那么只剩下有效比较方案的问题了。那么,你在问题的哪一部分被卡住了?@dmckee对两个是,但不排除案例。没有。我很抱歉这里的所有人:(评论的目的不是让你感觉不好,而是帮助你写更好的问题。这里你有两个问题:(1)如何执行字符串的不区分大小写比较;(2)如何有效地存储已经看到的行并与它们进行比较。第一个问题可能已经在堆栈溢出上得到了回答,所以您可以进行冷搜索。第二个问题应该是更明确的问题。无论如何,我看到您已经得到了很好的答案。
# /tmp/foo
one
One
oNe
two
three
grep --ignore-case --line-number one /tmp/foo