我有这些数据:
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个字符不匹配...因此检查重复行不是一个选项。
注意:需要保留订单。
答案 0 :(得分:4)
from collections import OrderedDict
lines = OrderedDict()
for line in file:
lines[line[0:12]] = line
这将保留行的顺序,同时消除重复。
编辑:This version of OrderedDict适用于Python 2.4,2.5和2.6。
答案 1 :(得分: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
答案 2 :(得分:0)
使用字典,将前12个字符作为键:
mydict = {}
for line in file:
key = line[:12]
value = line
mydict[key] = line
这会自动覆盖之前的所有条目。