4

テキスト ファイルから重複する単語を削除したい。

私は次のようなものを含むいくつかのテキストファイルを持っています:

None_None

ConfigHandler_56663624
ConfigHandler_56663624
ConfigHandler_56663624
ConfigHandler_56663624

None_None

ColumnConverter_56963312
ColumnConverter_56963312

PredicatesFactory_56963424
PredicatesFactory_56963424

PredicateConverter_56963648
PredicateConverter_56963648

ConfigHandler_80134888
ConfigHandler_80134888
ConfigHandler_80134888
ConfigHandler_80134888

結果の出力は次のようにする必要があります。

None_None

ConfigHandler_56663624

ColumnConverter_56963312

PredicatesFactory_56963424

PredicateConverter_56963648

ConfigHandler_80134888

en=set(open('file.txt') というコマンドだけを使用しましたが、機能しません。

ファイルから一意のセットのみを抽出する方法を教えてください。

ありがとうございました

4

7 に答える 7

8

これは、セットを使用してテキスト ファイルから重複を削除する簡単なソリューションです。

lines = open('workfile.txt', 'r').readlines()

lines_set = set(lines)

out  = open('workfile.txt', 'w')

for line in lines_set:
    out.write(line)
于 2013-04-05T09:40:33.633 に答える
5

ここでは、(セットとは異なり) 順序を保持するオプションについて説明しますが、同じ動作をします (EOL 文字は意図的に削除され、空白行は無視されることに注意してください)...

from collections import OrderedDict

with open('/home/jon/testdata.txt') as fin:
    lines = (line.rstrip() for line in fin)
    unique_lines = OrderedDict.fromkeys( (line for line in lines if line) )

print unique_lines.keys()
# ['None_None', 'ConfigHandler_56663624', 'ColumnConverter_56963312',PredicatesFactory_56963424', 'PredicateConverter_56963648', 'ConfigHandler_80134888']

次に、上記を出力ファイルに書き込むだけです。

于 2013-04-05T09:32:17.237 に答える
2

セットでそれを行う方法は次のとおりです(順序付けられていない結果):

from pprint import pprint

with open('input.txt', 'r') as f:
    print pprint(set(f.readlines()))

さらに、改行文字を削除したい場合があります。

于 2013-04-05T09:30:20.750 に答える
1
def remove_duplicates(infile):
    storehouse = set()
    with open('outfile.txt', 'w+') as out:
        for line in open(infile):
            if line not in storehouse:
                out.write(line)
                storehouse.add(line)

remove_duplicates('infile.txt')
于 2016-07-29T12:06:37.997 に答える
0

重複しない出力を取得したいだけの場合は、uniqおよびを使用できますsort

hvn@lappy: /tmp () $ sort -nr dup | uniq
PredicatesFactory_56963424
PredicateConverter_56963648
None_None
ConfigHandler_80134888
ConfigHandler_56663624
ColumnConverter_56963312

パイソンの場合:

In [2]: with open("dup", 'rt') as f:
    lines = f.readlines()
   ...:     

In [3]: lines
Out[3]: 
['None_None\n',
 '\n',
 'ConfigHandler_56663624\n',
 'ConfigHandler_56663624\n',
 'ConfigHandler_56663624\n',
 'ConfigHandler_56663624\n',
 '\n',
 'None_None\n',
 '\n',
 'ColumnConverter_56963312\n',
 'ColumnConverter_56963312\n',
 '\n',
 'PredicatesFactory_56963424\n',
 'PredicatesFactory_56963424\n',
 '\n',
 'PredicateConverter_56963648\n',
 'PredicateConverter_56963648\n',
 '\n',
 'ConfigHandler_80134888\n',
 'ConfigHandler_80134888\n',
 'ConfigHandler_80134888\n',
 'ConfigHandler_80134888\n']

In [4]: set(lines)
Out[4]: 
set(['ColumnConverter_56963312\n',
     '\n',
     'PredicatesFactory_56963424\n',
     'ConfigHandler_56663624\n',
     'PredicateConverter_56963648\n',
     'ConfigHandler_80134888\n',
     'None_None\n'])
于 2013-04-05T09:32:39.403 に答える
0
import json
myfile = json.load(open('yourfile', 'r'))
uniq = set()
for p in myfile:
if p in uniq:
    print "duplicate : " + p
    del p
else:
    uniq.add(p)
print uniq
于 2013-04-05T10:38:07.837 に答える