7

約 1,200 行のテキスト ファイルがあります。それらのいくつかは重複しています。

ファイル内の重複行を見つけて (ただし、大文字と小文字を区別する必要はありません)、その行のテキストを画面に出力して、探し出すことができるようにするにはどうすればよいでしょうか? それらなどを削除したくありません。それらがどの行であるかを見つけるだけです。

4

3 に答える 3

25

これは、セットを使用すると非常に簡単です。

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)
于 2012-10-17T15:28:03.800 に答える
9

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
于 2012-10-17T15:34:54.563 に答える
2

大文字と小文字を区別しない重複の検索

これは行番号を提供しませんが重複行のリストを提供し、さらに調査することができます。例えば:

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

サンプルデータファイル

# /tmp/foo
one
One
oNe
two
three

上記のパイプラインは、次の結果を正しく生成します。

1

行番号を見つける

次に、次のように関連する行番号を grep できます。

grep --ignore-case --line-number one /tmp/foo
于 2012-10-17T15:36:22.567 に答える