找到以相同字符串开头的行并保留最后一次出现
我有这些数据:
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个字符之后的内容是不一样的……所以不能通过检查重复的行来解决这个问题。
注意:要保持原来的顺序。
3 个回答
0
使用一个字典,把前12个字符当作键:
mydict = {}
for line in file:
key = line[:12]
value = line
mydict[key] = line
这样做会自动覆盖之前的所有条目。
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
4
from collections import OrderedDict
lines = OrderedDict()
for line in file:
lines[line[0:12]] = line
这样做可以保持行的顺序,同时去掉重复的内容。
补充说明:这个版本的OrderedDict适用于Python 2.4、2.5和2.6。