[英]Find lines beginning with same string and keep last occurance
我有此数据:
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个字符后的字符不匹配...因此,检查重复行不是一个选择。
注意:需要保留订单。
from collections import OrderedDict
lines = OrderedDict()
for line in file:
lines[line[0:12]] = line
这将保留行的顺序,同时消除重复。
编辑: 此版本的OrderedDict可在Python 2.4、2.5和2.6上运行。
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
使用字典,以前12个字符为键:
mydict = {}
for line in file:
key = line[:12]
value = line
mydict[key] = line
这将自动覆盖所有先前的条目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.