1

私はこのデータを持っています:

E 71484666NC 1201011060240260 387802-1227810  1022    25   0   5   2   313D 0 1G5
E 71484666NC 1201011060240263 387902-1227910  1300    10   0   2   1   300D 0 1A5
E 10115693AK 1201011060617450 658160-1517007   021 10  0 896  71   4   131L 2 AA2
E 10310002PR 0201011060102315 191509 -664820 39726  5  5 935  50  46 21282D 5 0hn

同じ最初の12文字で始まる行を見つける必要があります。複数ある場合は、前のオカレンスを削除し、最後のオカレンスのみを保持する必要があります。したがって、次のようになります。

E 71484666NC 1201011060240263 387902-1227910  1300    10   0   2   1   300D 0 1A5
E 10115693AK 1201011060617450 658160-1517007   021 10  0 896  71   4   131L 2 AA2
E 10310002PR 0201011060102315 191509 -664820 39726  5  5 935  50  46 21282D 5 0hn

注:ほとんどの場合、最初の12文字以降の文字は一致しません...したがって、重複行をチェックすることはできません。

注:順序を保持する必要があります。

4

3 に答える 3

4
from collections import OrderedDict

lines = OrderedDict()
for line in file:
    lines[line[0:12]] = line

これにより、重複を排除しながら行の順序が保持されます。

編集:このバージョンの OrderedDictは、Python 2.4、2.5、および 2.6 で動作します。

于 2011-07-23T11:59:18.610 に答える
1
from collections import OrderedDict

mydata = """E 71484666NC 1201011060240260 387802-1227810  1022    25   0   5   2   313D 0 1G5
E 71484666NC 1201011060240263 387902-1227910  1300    10   0   2   1   300D 0 1A5
E 10115693AK 1201011060617450 658160-1517007   021 10  0 896  71   4   131L 2 AA2
E 10310002PR 0201011060102315 191509 -664820 39726  5  5 935  50  46 21282D 5 0hn"""

datalines = mydata.split('\n')
uniques = OrderedDict((x[:12],x[12:]) for x in datalines)
final = [x+y for x,y in uniques.items()]

for x in final:
  print x

これにより、次が生成されます。

E 71484666NC 1201011060240263 387902-1227910  1300    10   0   2   1   300D 0 1A5
E 10115693AK 1201011060617450 658160-1517007   021 10  0 896  71   4   131L 2 AA2
E 10310002PR 0201011060102315 191509 -664820 39726  5  5 935  50  46 21282D 5 0hn
于 2011-07-23T12:02:02.947 に答える
0

最初の12文字をキーとして、辞書を使用します。

mydict = {}
for line in file:
    key = line[:12]
    value = line
    mydict[key] = line

これにより、以前のすべてのエントリが自動的に上書きされます。

于 2011-07-23T11:55:46.443 に答える