首先,我是Python的新手,所以我可能会犯一些基本的错误。 我有以下要求。
实体数据行的示例:
'SAFRP ASBDZ0192894 1 ABCDEFGHIJKLMNOPQRSTUV1234567809'
| | |
| Entity Type Code
| |
| Entity Type SubCode
|
| Continued Indicator
AFR in the line = Region
我需要以最有效的方式来解码此文件中的实体(大约20种类型)。目前,我为每个要解码的实体迭代文件。
我使用Regex来测试每一行,以查看它是否代表我要查找的实体。
ISENTITY = re.compile(r'^(S|T)(?P<Region>.{3})(?P<EntityCode>[ADEHPRTU])(?P<SubCodeA>.).{6}(?P<SubCodeB>.).{8}.{102}(?P<FRN>.{5})(?P<Date>[0-9]{4})')
--within loop iterating through all lines/records
m = ISENTITY.match(record)
if m:
entitycode = m.group('EntityCode')
switcher = {
'A': m.group('SubCodeA'),
'D': m.group('SubCodeA'),
'E': m.group('SubCodeA'),
'H': m.group('SubCodeB'),
'P': m.group('SubCodeB'),
'R': '-',
'T': m.group('SubCodeA'),
'U': m.group('SubCodeA')
}
subcode = switcher.get(entitycode, None)
if entitycode+subcode == entity_to_process_code:
# This is line represents a Widget that I need to process using
# the decode info for that specific entity type
每个实体类型50s x 20处理每个实体大约需要50秒的时间
我认为一种更有效的方法可能是先以某种方式对文件进行排序,然后按实体类型对其进行排序,然后依次迭代以按顺序处理实体类型。
当我完成一种实体类型的处理后,我可以从文件列表中删除所有这些行,然后再次开始寻找下一个实体类型的过程(在现在较小的列表中)。
不幸的是,我不知道如何对列表进行排序,以便可以正确地对列表进行排序(按实体类型+子代码),并保证保持任何连续行的顺序。 list.sort()不会解决问题。
此外,如果我完全错误地从这个角度出发,请提出一些更合适的建议。
谢谢