ファイル内の重複レコードの削除

Possible Duplicate:
How might I remove duplicate lines from a file?

削除したいレコードが重複しているファイルがあります。これは私が試したことです

import sys  

for line in sys.stdin:  
    line = line.rstrip()  
    line = line.split()  
    idlist = []   
    if idlist == []:  
        idlist = line[1]  
    else:  
    idlist.append(line[1])  
    print line[0], idlist  

#動作しませんでした

この

for line in sys.stdin:  
    line = line.rstrip()  
    line = line.split()  
    lines_seen = set()  
    dup = line[1]  
    if dup not in lines_seen:  
        lines_seen = dup  
    else:  
        lines_seen.append(dup)  
    print line[0], lines_seen  

sys.stdin.close()

#動作しませんでした either!

これは入力がどのように見えるか

BLE 1234
BLE 1223
LLE 3456
ELE 1223
BLE 4444
ELE 5555
BLE 4444

この is what I want the output to look like

BLE 1234
BLE 1223
LLE 3456
BLE 4444
ELE 5555

ありがとう! エッジ

1
あなたは「重複レコード」とは何ですか?
追加された 著者 eumiro,
なぜ "BLE 1223"があなたの望む出力にないのですか?そして、なぜ "LLE 3456"と "ELE 1223"の順序が希望の出力で逆になっていますか?
追加された 著者 silvado,
私が第2列に焦点を当てているこの例の重複レコードは、 '1223'と '4444'です。
追加された 著者 edg,

3 答え

elem1_seen = set()                 # first initialize an empty set of seen elem[1]
lines_out = []                     # list of "unique" output lines
for line in sys.stdin:             # iterate over input
    elems = line.rstrip().split()  # split line into two elements
    if elems[1] not in elem1_seen: # if second element not seen before...
        lines_out.append(line)     # append the whole line to output
        elem1_seen.add(elems[1])   # add this second element to seen before set
print lines_out                    # print output
3
追加された
これは美しく動作し、私が試したものよりもはるかに理にかなっています:)
追加された 著者 edg,

主な問題は、変数の型を変更して混乱を招くことです。

import sys  

for line in sys.stdin:  
    line = line.rstrip()   #Line is a string  
    line = line.split()    #Line is a list
    idlist = []            #idlist is a list
    if idlist == []:  
        idlist = line[1]   #id list is a string
    else:  
        idlist.append(line[1])  #and now?
    print line[0], idlist 
0
追加された
はい、しかし、あなたが "idlist = line [1]"と言うときは、元の定義を上書きする新しい変数(この場合は文字列)を作成しています
追加された 著者 Don,
その時点で、行はリストですが、行[1]は2番目の要素(文字列)であり、最初の要素ではありません
追加された 著者 Don,
はい:line.split()はリストを返します
追加された 著者 Don,
idlist = []と言うと、idlistは空のリストになると私は考えましたか? (リストは角括弧で識別されるため)。
追加された 著者 edg,
私は知っていることが分かりました!ありがとう。
追加された 著者 edg,
Line = line.split()でリストを変更したと思ったので、idlist = line [1]が私が作成した list の最初の要素になると仮定しました。 ..?
追加された 著者 edg,
私はライン= line.split()は、2つの要素を持つリストに完全な行を変更するだろうと思った?
追加された 著者 edg,
import fileinput

ss = '''BLE 1234
BLE 1223
LLE 3456
ELE 1223
BLE 4444
ELE 5555
BLE 4444 
'''
with open('klmp.txt','w') as f:
    f.write(ss)





seen = []
for line in fileinput.input('klmp.txt',inplace=1):
    b = line.split()[1]
    if b not in seen:
        seen.append(b)
        print line.strip()

SOという言葉で 'fileinput'という単語を検索すると、私は見つけました:

すべてを削除する方法Pythonの助けを借りてファイル内の空白行?

0
追加された